在 gdb 无法识别的情况下获取段错误



我正在尝试从数组中的某个位置开始打印出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是如何填充的,不能说的要多。

最新更新