【发布时间】:2017-06-07 11:26:16
【问题描述】:
我正在学习 C 语言。谁能帮我理解以下结果:
int main()
{
struct xx
{
int x;
char name[];
};
struct xx *s;
printf("%d",s->x);
printf("%s",s->name);
return 0;
}
输出:- 分段错误
我写了另一个代码是:
struct Foo
{
char *pName;
};
int main()
{
struct Foo *obj = malloc(sizeof(struct Foo));
strcpy(obj->pName,"Your Name");
printf("%s", obj->pName);
return 0;
}
输出:分段错误(核心转储);
为什么会出现分段错误?代码有什么问题? core dumped是什么意思?
【问题讨论】:
-
这段代码不应该编译。如果是这样,你的编译器就是垃圾。
-
我强烈建议您阅读一本关于 C 的好书。你的很多问题都会在那里解决。查看C tag's info page 获取一些书籍建议。
-
现在检查代码;我的编译器是 gcc 我希望它不是废话。没有书解释为什么 malloc 在第二个代码中不起作用以及为什么第一个代码显示分段错误
-
@user2257769 - 你目前最大的问题仍然列在我的回答中(#3 和#5)。每当你有一个指针,在你取消引用它之前,你需要将它分配给一些有效的内存。示例 1 中的
s没有指向任何内容,您需要为其分配一些内存。pName没有任何内存,因此 strcpy 失败并崩溃。此外,您更新了代码,在示例 1 中添加了name的新问题 -
thanx mike 我明白了,超级酷的人
标签: c