c分段断层构造

c分段断层构造,c,segmentation-fault,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

我有一个名为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;
}

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

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

不要忘记在使用完free后调用它,因为C没有java那样的垃圾收集器。

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

尝试:

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_名称也是如此。

应该是
sizeof(struct table)
sizeof*newTable
(我更喜欢后者)。与C++不同,Stutt标签必须在前面的代码>结构> /COD>关键字。使用StrudUp()使用该名称和SyNeX来描述ELIBEN。分配他们是不可能的。