获取gdb无法识别的段错误

时间:2014-03-08 17:15:34

标签: c

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

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

1 个答案:

答案 0 :(得分:1)

如果main_list [highest_level] [0]为NULL,那么您初次尝试测试travTemp-> next将失败。 @Filipe已经解决了在评论中获取更多调试信息的问题。

更新:如果它不是NULL但是跟随travTemp似乎是问题,也许它是其他一些非法的值。没看到main_list是如何填充的,不能说更多。