我正在学习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;
} 输出:分段故障(核心转储);
为什么我会遇到分段错误?代码有什么问题?核心转储是什么意思?
发布于 2013-04-08 22:03:33
如果您在托管环境(在带有操作系统的系统上运行)中工作,则main()应具有标准格式(int main(void))并返回示例1中的int value
obj
struct Foo
pName分配任何内存,这意味着出了很大的问题。发布于 2013-04-08 22:04:02
为该结构声明了一个指针,但该指针从未初始化,也从未创建过任何结构。s指向一些随机内存空间,您可以尝试从中读取数据。
在第二种情况下,您有一个从未分配过内存的指针pName。它还指向一个随机的内存空间。您正在从字符串文字复制字符串,并写入一个随机的内存位置。
发布于 2013-04-08 22:07:49
在示例1中,您声明了一个指针,但尚未对其进行初始化。因此,指针指向未知位置。
在示例2obj->pname中,出于同样的原因,指向内存的未知部分(它未初始化),因此尝试在strcpy中访问它将使程序崩溃。
你应该做的:你应该为指针分配一些内存,让它们指向属于你的内存,而不是一些随机的内存(非法?)内存的一部分
https://stackoverflow.com/questions/15881091
复制相似问题