ADT 的分段错误

Posted

技术标签:

【中文标题】ADT 的分段错误【英文标题】:Segmentation fault with ADT 【发布时间】:2015-10-13 16:22:16 【问题描述】:

这给了我一个分段错误错误。任何想法为什么?

   #include <stdio.h>
   #include <string.h>
   #include <stdlib.h>
    typedef struct 
    int *items;
    int length;
  IntArray;

 void init(IntArray *I)
 
// I->length = 0;       
 I->items = (int *) malloc(sizeof(int) * 5);
 I->items[0] = 1;

     
      int main()
   
   IntArray *i;
      init(i);
   return 0;

我认为除了在 main 中声明 IntArray 之外,我可能做的一切都是正确的,但不确定我是如何做到的

【问题讨论】:

【参考方案1】:

这里:

int main()

    IntArray *i;    // uninitialised pointer

    init(i);
    return 0;

i 未初始化。它没有指向任何地方。当您将此指针传递给init 并通过i-&gt;items 取消引用它时,您会遇到分段违规。

你可以创建一个结构对象并传递它的地址,而不是创建一个指针:

int main()

    IntArray i;      // uninitialised object

    init(&i);        // valid address to said object
    return 0;

对象本身也未初始化,即其字段包含垃圾,但您将在 init 中修复它。

【讨论】:

谢谢你,解决了。我有一种感觉,这是错误,但刚接触 C 语言时我感到很困惑。【参考方案2】:

传递给init(IntArray *I)的参数i在函数调用之前没有在main()中定义,导致分配I-&gt;items时出现未定义的行为。

在这种情况下,未定义的行为意味着您的段错误。

【讨论】:

以上是关于ADT 的分段错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码在 leetcode 运行良好,但在 geeksforgeeks 出现分段错误?

python跟踪分段错误

带有 std::promise 的 C++11 分段错误

C++:当我添加看似无关的代码行时,分段错误消失了

为啥调用 glCreateShader 时这个 OpenGL 着色器分段错误?

将结构插入地图时出现分段错误