2012-03-13 114 views
-2

我有一个函数应该将文件添加到链表的节点,每个文件都是一个包含常量char *名称的结构。该函数使用一个链表和一个const char [](它将作为新数据结构的名称)的参数。一切顺利,直到我再次调用该函数,我的第一个数据的名称被更改为新的,我想我忘了在某处分配内存。 (或者我搞砸了用const字符)我遇到了别名问题

(这里的代码,把为const char [] NEW_NAME为点列表中的部分)

node->data_list[node->data_count].data_name = new_name; 
    node->data_count++; 
+0

需要更多信息,如更多的代码。 – 2012-03-13 20:58:51

回答

0

如果data_namechar*new_namechar[]这样的:

node->data_list[node->data_count].data_name = new_name; 

不会复制到new_namedata_name只是意味着data_namenew_name。列表中的每个data_name将指向new_name

您需要malloc()strcpy()

node->data_list[node->data_count].data_name = malloc(strlen(new_name) + 1); 
strcpy(node->data_list[node->data_count].data_name, new_name); 

记住:

free(node->data_list[node->data_count].data_name); 

需要时不再。

1

大概new_name点相同的缓冲每次你调用该函数,所以连续调用最终会改变旧节点仍然指向的旧缓冲区。你需要每次使用malloc来分配一个新的缓冲区。