gpt4 book ai didi

c - 在哪里解除分配(免费)

转载 作者:行者123 更新时间:2023-11-30 18:29:32 28 4
gpt4 key购买 nike

正在学习有关 C 语言链接列表的教程。我已编译此代码并通过 valgrind 运行它。它显示了 4 次分配和 0 次释放,这是我理解的。我需要知道如何正确调用 free() 来释放分配。

代码示例:llist2.c

// linked list: inserting at the n'th position
#include "stdio.h"
#include "stdlib.h"

typedef struct Node
{
int data;
struct Node* next;
} Node;

Node* head;

void Insert(int data, int n)
{
Node* temp1 = malloc(sizeof(Node));
temp1->data = data;
temp1->next = NULL;

if(n==1) { // list is empty, set next to head, initially NULL.
temp1->next = head;
head = temp1;
return;
}

Node* temp2 = head;
for(int i = 0; i < n-2; i+=1) {
temp2 = temp2->next;
}

temp1->next = temp2->next;
temp2->next = temp1;
}

void Print() {
Node* temp = head;
while(temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}

printf("\n");
}

int main (int argc, char *argv[])
{
head = NULL;
Insert(2,1);
Insert(3,2);
Insert(4,1);
Insert(5,2);
Print();

return 0;
}

最佳答案

您需要创建一个函数来释放您的列表。

void freelist(Node* head)
{
Node *next,*curr;
curr = head;
while (curr != NULL)
{
next = curr -> next;
free(curr);
curr = next;
}
}

您可以在最后在 main 中调用它。

int main (int argc, char *argv[])
{
// Other code

freelist(head);
head = NULL;
return 0;
}

关于c - 在哪里解除分配(免费),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593056/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com