首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言结构

C语言结构
EN

Stack Overflow用户
提问于 2013-04-08 21:59:12
回答 7查看 455关注 0票数 0

我正在学习C语言。有谁能帮我理解一下下面的结果:

代码语言:javascript
运行
复制
int main()
{
  struct xx
  {
    int x;
    char name[];
  };
  struct xx *s;
  printf("%d",s->x);
  printf("%s",s->name);
   return 0;
}

输出:-分段故障

我写了另一个代码,它是:

代码语言:javascript
运行
复制
struct Foo
{
  char *pName;
};

int main()
{
  struct Foo *obj = malloc(sizeof(struct Foo));
  strcpy(obj->pName,"Your Name");
  printf("%s", obj->pName);
  return 0;
} 

输出:分段故障(核心转储);

为什么我会遇到分段错误?代码有什么问题?核心转储是什么意思?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-04-08 22:03:33

如果您在托管环境(在带有操作系统的系统上运行)中工作,则main()应具有标准格式(int main(void))并返回示例1中的int value

  • 。你没有给你的指针分配任何内存,在你的第二个例子中有一个内存泄漏,在你的第二个例子中,你没有释放obj

  • You中的内存,在你的第二个例子中,没有给struct Foo

  • Core dump中的pName分配任何内存,这意味着出了很大的问题。
票数 5
EN

Stack Overflow用户

发布于 2013-04-08 22:04:02

为该结构声明了一个指针,但该指针从未初始化,也从未创建过任何结构。s指向一些随机内存空间,您可以尝试从中读取数据。

在第二种情况下,您有一个从未分配过内存的指针pName。它还指向一个随机的内存空间。您正在从字符串文字复制字符串,并写入一个随机的内存位置。

票数 1
EN

Stack Overflow用户

发布于 2013-04-08 22:07:49

在示例1中,您声明了一个指针,但尚未对其进行初始化。因此,指针指向未知位置。

在示例2obj->pname中,出于同样的原因,指向内存的未知部分(它未初始化),因此尝试在strcpy中访问它将使程序崩溃。

你应该做的:你应该为指针分配一些内存,让它们指向属于你的内存,而不是一些随机的内存(非法?)内存的一部分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15881091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档