【问题标题】:Segmentation fault [duplicate]分段错误[重复]
【发布时间】:2011-10-01 19:29:39
【问题描述】:

这段代码sn-p有什么问题?我遇到了分段错误!

#include<stdio.h>

int main()
{
        struct {
                char* name;
                int age;
        } *emp;
        char* empname = "Kumar";
        int empage = 31;
        emp->name = empname;
        emp->age = empage;
        printf("empname :%s\n",emp->name);
        printf("empage :%d",emp->age);
        return 0;
}

以及如何更正该程序以使其正常工作?

【问题讨论】:

  • 你需要一本关于 C 编程的书并学习指针。从一开始就直接掌握基础知识很重要,否则以后给你带来麻烦。

标签: c segmentation-fault


【解决方案1】:

您没有为emp 分配内存。在使用emp之前,请尝试

emp = malloc(sizeof(*emp));

【讨论】:

  • sizeof(emp),否则你得到一个指针的大小...
  • @yankee 不,emp 是指针,*emp 是指向的对象:-)
  • 好的,今天学习了一些关于 C 的东西 :-)。
  • @nil 要格式化我的帖子,我需要将我的代码放在一对 ` 中吗?像emp = malloc(sizeof(emp)); 或stackoverflow 在发布之前是否有任何文档或工具可以做到这一点?此外,我使用 c 和失去基础已经很长时间了,你是对的。这些天我目前正在使用java语言。另外,你能指出 StackOverflow 的规则(发布规则)吗?
【解决方案2】:

如果您在编译-Wall 中测试您的代码,终端会告诉您“emp”未初始化,因此您必须以动态方式分配“emp”(malloc 等)。

int len_struct = sizeof(*emp);
emp = malloc(len_struct);

PS:这是我的建议:我更喜欢在 global memory(在 Data 中)创建一个结构,因为我认为这个结构将来会在prg中使用。

【讨论】:

    【解决方案3】:

    您无需使用指向structprintf 的指针。

    #include<stdio.h>
    int main()
    {
        puts("empname :Kumar");
        puts("empage :30");
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 2013-08-25
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-18
      相关资源
      最近更新 更多