c分段断层构造
我有一个名为table的结构,我只想创建一个表,就像java中的构造函数一样,但当我在main中调用这个函数时,它会给出分段错误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
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。分配他们是不可能的。