我正在C中执行链表实现。程序从文件中读取数据中的数据并将其放入链表中,打印一些东西,然后删除链接列表并释放内存。然后我运行valgrind,它告诉我在我的文件中有内存泄漏。这里是我处理文件的代码:Valgrind告诉我在C中的内存泄漏,我敢肯定我已修复
while(fgets(line, sizeof line, file) != NULL){
theData = (ElementStructs*) malloc(sizeof(ElementStructs));
token = strtok(line, " \t\n");
strcpy((theData->word), token);
AddToBackOfLinkedList(theList, theData);
}
/* Do some printing here */
fclose(file);
DestroyLinkedList(theList);
我看到的问题当然是我为每个数据标记分配一个新的内存块。但是,我敢肯定我释放了DestroyLinkedList()函数中分配的内存块。这里是我的代码为DestroyLinkedList()函数:
void DestroyLinkedList(LinkedLists *ListPtr){
LinkedListNodes* curNode = ListPtr->FrontPtr;
LinkedListNodes* nextNode = curNode->Next;
while(curNode != NULL){
free(curNode);
curNode = nextNode;
if(curNode!=NULL){
nextNode = curNode->Next;
}
}
}
这有什么错我释放分配给我的列表中的节点的内存的方式?
如何'word'在你的结构分配呢? – coredump
我没有看到任何免费()的ElementStructs分配在第一个片段。我猜这个curNode包含指向ElementStructs的指针,并且它没有被free(CurNode)释放。你应该添加类似free(curNode-> data)的东西以释放内存。 它有任何意义吗? – Dany
Valgrind当然会告诉您一些比以下更具体的内容:_“我的文件中存在内存泄漏”_,对不对? – ninjalj