c分段故障结构

时间:2009-12-19 16:25:48

标签: c segmentation-fault

我有一个名为table的结构,我只想创建一个表,就像java中的构造函数一样,但是当我在main中调用这个函数时,它会给出分段错误

struct table *create(char *name,int number,char *s_name)
{
  struct table *newTable;
  newTable->name = name;
  newTable->number = number;
  newTable->s_name = s_name;
  return newTable;
}

4 个答案:

答案 0 :(得分:10)

struct table *newTable = malloc(sizeof(struct table));

当你使用它时不要忘记自由调用,因为C没有像java那样的垃圾收集器。

答案 1 :(得分:8)

您尚未为该对象分配任何内存,并且正在取消引用该结构的字段。在访问之前,您需要使用malloc为newTable分配内存

答案 2 :(得分:0)

您正在尝试访问未分配/未初始化的内存&除非使用malloc或其他内存分配方法显式分配内存,否则SIGSEGV(分段错误)对代码来说完全没问题。

答案 3 :(得分:0)

尝试:

struct table *create(char *name,int number,char *s_name)
{
  struct table *newTable = malloc(sizeof(*newTable));
  if (!newTable)
    return NULL;

  newTable->name = name;
  newTable->number = number;
  newTable->s_name = s_name;
  return newTable;
}

另一个警告:在此代码中,newTable->name只指向提供的name,不会复制。这可能不是你想要的,但很难从这个小片段中分辨出来。另一种方法是复制名称。 s_name也是如此。