这给了我一个分段错误错误。有什么想法吗?
#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,我不确定我是怎么做的
答案 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
中修复它。