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
.
中修复它
这给了我一个分段错误。有什么想法吗?
#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
.