[英]How to free a linked list?
我已经在一个函数中创建了一个链表,在程序的其余部分中,我都使用指针来访问链表。 现在如何在程序结束时释放此链接列表? 我是简单地使用free(CircuitData)
还是必须遍历列表以释放每个节点? 写这篇文章我想释放每个节点是显而易见的答案...
附带一提,我还想问一问如何找出在程序执行期间分配的所有内存是否正确释放?
ListNodeType *CircuitData;
CircuitData = NULL;
ReadFile(&CircuitData, &numEl, &numNodes);
void ReadFile(ListNodeType **CircuitData, int *numEl, int *numNodes){
ListNodeType *newPtr, *tempPtr;
newPtr = malloc(sizeof(ListNodeType));
*CircuitData = newPtr;
newPtr->nextPtr = NULL;
//MORE CODE
我会想到这样的事情:
struct node
{
int data;
node* next;
} *head;
void deleteAllNodes(node* start)
{
while (start != NULL)
{
node* temp = start;
start = start -> next;
free(temp);
}
}
我认为您可以执行以下操作:
void freeFunction(ListNodeType *CircuitData)
{
void *victim;
while (CircuitData)
{
victim = CircuitData;
CircuitData = CircuitData->next;
free(victim);
}
}
对于每个malloc
您将需要一个free
否则会泄漏内存。 分析程序以查看是否没有内存泄漏的一种可能方法是使用Valgrind 。
对于第一个问题,是的,您应该遍历列表并free
每个节点。
第二个问题很难回答。 如果您在内存中有一个对象,但无法访问它,则是内存泄漏。
您可以使用一些工具来分析内存池。 查看valgrind:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.