我在函数中创建了一个链表,在程序的其余部分我使用指针访问列表。现在,如何在程序结束时释放此链接列表?我是否明白使用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
答案 0 :(得分:6)
我会想到这样的事情:
struct node
{
int data;
node* next;
} *head;
void deleteAllNodes(node* start)
{
while (start != NULL)
{
node* temp = start;
start = start -> next;
free(temp);
}
}
答案 1 :(得分:2)
我认为你可以这样做:
void freeFunction(ListNodeType *CircuitData)
{
void *victim;
while (CircuitData)
{
victim = CircuitData;
CircuitData = CircuitData->next;
free(victim);
}
}
答案 2 :(得分:1)
对于每个malloc
,您将需要一个free
,否则您将泄漏内存。分析程序以查看是否存在内存泄漏的一种可能方法是使用Valgrind。
答案 3 :(得分:1)
对于您的第一个问题,是的,您应该遍历列表并free
每个节点。
第二个问题有点难以回答。如果内存中有一个对象,但无法访问它,那就是内存泄漏。
您可以使用工具分析内存池。看看valgrind: