ADT分段故障

时间:2015-10-13 16:22:16

标签: c data-structures typedef

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

   #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;}

我想也许我做的一切正确,除了在主要声明IntArray,我不确定我是怎么做的

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

下面:

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

    init(i);
    return 0;
}

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

您可以创建一个struct对象并传递其地址:

,而不是创建指针
int main()
{
    IntArray i;      // uninitialised object

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

对象本身也是未初始化的,即它的字段包含垃圾,但你会在init中修复它。