我正在尝试从数组中的某个位置开始打印出二维数组的内容(因为并非所有数组元素都被填充)。该数组包含指向我创建的称为节点的数据结构的指针。这是打印代码:
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");
}
}
基本上,数组以排序的方式保存指向节点元素的指针。每个节点都包含一个“key”属性和一个“d”属性,我只是尝试逐级进行并干净地打印出{key,d}记录。当我在main中调用print命令时,我不断收到段错误。我尝试使用gdb来调试它,但它不会给我一个实际的行。它只是说:
#0 0x0000000000400b2e in repository_print ()
#1 0x0000000000400722 in main ()
有谁可以找到seg故障或为什么发生seg故障?感谢。
编辑:
我尝试使用-g进行编译,发现错误发生在“while((travTemp-> next)!= NULL)”行。这让我感到困惑,因为这个属性不应该是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");
但是,现在,我在print语句行遇到了一个seg错误。如果travTemp-> next不等于NULL,那么travTemp-> next->键的问题是什么?我不知道为什么因为这些值应该存在于存储库中。
答案 0 :(得分:1)
如果main_list [highest_level] [0]为NULL,那么您初次尝试测试travTemp-> next将失败。 @Filipe已经解决了在评论中获取更多调试信息的问题。
更新:如果它不是NULL但是跟随travTemp似乎是问题,也许它是其他一些非法的值。没看到main_list是如何填充的,不能说更多。