C 获得一个gdb不存在的segfault';我认不出

C 获得一个gdb不存在的segfault';我认不出,c,C,我试图从数组中的某个位置开始打印二维数组的内容(因为数组中的元素并非都已填充)。该数组包含指向我创建的称为节点的数据结构的指针。以下是打印代码: void repository_print(int print_elements){ node *travTemp; travTemp = main_list[highest_level][0]; while((travTemp->down)!=NULL){ while(

我试图从数组中的某个位置开始打印二维数组的内容(因为数组中的元素并非都已填充)。该数组包含指向我创建的称为节点的数据结构的指针。以下是打印代码:

    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命令时,我总是遇到一个segfault。我试着用gdb来调试它,但它不会给我一行实际的代码。它只是说:

   #0 0x0000000000400b2e in repository_print ()
   #1 0x0000000000400722 in main ()
有人知道我如何找到seg故障或seg故障发生的原因吗?谢谢

编辑:

我确实尝试过用-g编译,发现错误发生在“while((travTemp->next)!=NULL”行。这让我很困惑,因为这个属性不应该为NULL。我必须检查我的其余代码。如果任何人需要知道,主要的清单声明如下:

    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->key有什么问题?我不知道为什么,因为这些值应该存在于存储库中

如果主\u列表[最高\u级别][0]为空,则测试travTemp->next的初始尝试将失败@Filipe已经解决了在评论中获取更多调试信息的问题


更新:如果它不为NULL,但跟踪travTemp似乎是个问题,那么它可能是其他非法值。看不到主列表是如何填写的,只能说了。

你是用
-g
编译的吗?另外,请向我们展示
主列表的声明
。这是一个真正的2D数组吗?在segfault之前打印了多少数组?数组中没有一个位,但我发现了错误发生的位置,我只是不确定原因:/你确定错误在你说的行中吗?它不在外循环上?用
-g
-O0
编译(这是“负字母-O零”)。优化可能会让人困惑。我添加了一个print语句来检查travTemp是否为NULL,但它没有打印,所以我认为它不是NULL。@JeremyFisher在
printf
之后是否执行了
fflush(stdout)