C语言 链表的内存分配和FREE出现问题了!(内附问题详细说明)

2024-11-26 09:40:18
推荐回答(2个)
回答1:

1.addEnd():
toAdd->name = (char *)calloc( strlen(name), sizeof(unsigned char));
c的标准字符串为null结尾,故该改为:
toAdd->name = (char *)calloc( strlen(name)+1, sizeof(unsigned char));
还有你的链表每个节点中的DATA都是有效值,而一般都是以next的有效性(是否为null值)判断data的有效性,即一个数据上的“空”链表总有以个节点。你的链表不容易初始化、重用和销毁。
2.addEnd():
strcpy(toAdd->name, name);
改用strncpy(),strncpy(toAdd->name,name,strlen(name)+1),strcpy()一旦越界操作,势必出现不可预料的错误。比如free()时。

ps:
语句:files++; addEnd(files,entry->d_name,&file_list);
真心不知道存储files有什么意思,你把i节点号存储在链表中,遍历时可以作为参数调用某些系统函数呀。。。。一个普通序列号,遍历链表就可以得到了。。去我的空间看看有很多链表的操作,链表不是你这么用的。

回答2:

我朋友聪少是这方面大牛,LZ如果需要,我可以把他的QQ发给你。