我正在尝试从数组中的某个位置开始打印出2维数组的内容(因为并非阵列的所有元素都填充)。该数组包含我创建的名为节点的数据结构的指针。这是打印代码:
void repository_print(int print_elements){
node *travTemp;
travTemp = main_list[highest_level][0];
while((travTemp->down)!=NULL){
while((travTemp->next)!=NULL){
printf(" {%d, %d}", travTemp->key, travTemp->d);
travTemp = travTemp->next;
}
travTemp = travTemp->down;
printf("n");
}
}
基本上,阵列以分类方式将指针固定为节点元素。每个节点都包含一个"键"属性和a" d"属性,我只是想按级别进行级别并打印出{key,d}记录。当我在主要主机中调用打印命令时,我会继续得到segfault。我尝试使用GDB调试它,但不会给我实际的线路。它只是说:
#0 0x0000000000400b2e in repository_print ()
#1 0x0000000000400722 in main ()
有人如何找到SEG故障,还是为什么发生SEG故障?谢谢。
编辑:
我确实尝试使用-g编译,发现错误是在" while((travtemp-> next)!= null"的行中发生的。这让我感到困惑,因为此属性不应为无效。我必须检查其余的代码。Main_list声明如下如下,以防任何人需要知道:
node *main_list[MAX_HEIGHT][MAX_LEVEL];
编辑:
因此,遵循Felipe的建议,我将打印功能更改为以下内容:
node *travTemp;
travTemp = main_list[highest_level][0];
while(travTemp!=NULL && (travTemp->down)!=NULL){
printf(" {%d, %d}", travTemp->next->key, travTemp->next->d);
travTemp = travTemp->next;
}
travTemp = main_list[highest_level+1][0];
printf("n");
但是,现在,我在打印语句行中遇到了SEG故障。如果travtemp-> next不等于null,那么travtemp-> next->键的问题是什么?我不知道为什么这些值应该存在于存储库中。
如果main_list [lize_level] [0]为null,则您的初步尝试测试travtemp->将失败。@filipe在评论中解决了更多调试信息。
update :如果不是零,但是跟随travtemp似乎是问题所在,也许是其他非法价值。看不到main_list是如何填充的,不能说的要多。