我有一个名为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;
}
答案 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也是如此。