我是C初学者,我很好奇为什么每次都给我一个Seg Fault:
#include <stdio.h>
#include <stdlib.h>
struct Wrapper {
int value;
};
int main () {
struct Wrapper *test;
test->value = 5;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道我还没有完全理解指针,但我想到了
struct_ptr->field
Run Code Online (Sandbox Code Playgroud)
是相同的
(*struct_ptr).field
Run Code Online (Sandbox Code Playgroud)
因此,尝试对场进行任务应该没问题.这与预期的效果如下:
struct Wrapper test;
test.value = 5;
Run Code Online (Sandbox Code Playgroud)
但我很好奇为什么使用指针导致Seg Fault.
我在Ubuntu 9.04(i486-linux-gnu),gcc版本4.4.1
Fre*_*son 12
您没有将指针指定给任何东西.这是一个未初始化的指针,指向谁知道什么,所以结果是未定义的.
您可以将指针指定给动态创建的实例,如下所示:
int main () {
struct Wrapper *test;
test = (struct Wrapper *) malloc(sizeof(struct Wrapper));
test->value = 5;
free(test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:意识到这是C,而不是C++.相应修复了代码示例.