ADT 的分段错误

Segmentation fault with ADT

这给了我一个分段错误。有什么想法吗?

   #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 之外我做的一切都正确,但我不确定我是怎么做到的

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

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

这里:

int main()
{
    IntArray *i;    // uninitialised pointer

    init(i);
    return 0;
}

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

您可以创建结构对象并传递其地址,而不是创建指针:

int main()
{
    IntArray i;      // uninitialised object

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

对象本身也未初始化,即它的字段包含垃圾,但您将在 init.

中修复它