【发布时间】:2017-05-31 06:16:40
【问题描述】:
struct data{
char *key;
char *fname;
char *lname;
char *grade;
struct data *next;
};
newnode = (struct data*)malloc(sizeof(struct data));
strcpy(newnode->lname,lname);
strcpy(newnode->grade,grade);
strcpy(newnode->key,key);
strcpy(newnode->fname,fname);
newnode->next=NULL;
所以我正在研究哈希表。上面的代码崩溃了
struct data *newnode;
newnode = (struct data*)malloc(sizeof(struct data));
newnode->lname=(char*)malloc(strlen(lname)+1);
newnode->fname=(char*)malloc(strlen(fname)+1);
newnode->grade=(char*)malloc(strlen(grade)+1);
newnode->key=(char*)malloc(strlen(key)+1);
strcpy(newnode->lname,lname);
strcpy(newnode->grade,grade);
strcpy(newnode->key,key);
strcpy(newnode->fname,fname);
newnode->next=NULL;
这段代码似乎可以运行。这是为什么?据我了解,我已经为堆中的结构分配了内存。为什么我必须专门为每个对象做这件事?我还缺少什么吗?因为我真的不明白为什么底部的例子会起作用。
【问题讨论】:
-
我们需要更多细节。例如,它会在哪一行崩溃?
-
顺便说一句:
strdup()是一种比malloc()/strcpy()组合更好的复制字符串的方法。 -
你还会想看强制性的“
malloc的返回没有必要”,没必要。请参阅:Do I cast the result of malloc?。 -
C 标准中没有的东西并不意味着它没有用。
-
strdup在 POSIX 中也可以在 Windows 中使用,因此对于桌面程序来说非常便携。当它在一些不起眼的平台上编译失败时,很容易提供一个仿真。
标签: c heap-memory