我有一个链接列表,其节点结构如下
struct node
{
char *p;
struct node *next;
}*start;
现在char *p是指向malloc调用分配的内存位置的指针。同样,整个空间也使用malloc进行分配。现在想要释放malloc调用所占用的空间,如下所示
main()
{
struct node *tmp;
tmp=malloc(sizeof(struct node));
tmp->next=NULL;
tmp->p=malloc(2*sizeof(int));
free(tmp->p);
free(tmp);
}
这是正确的方式来释放内存或这里需要什么?
这是正确的方法,但不要忘记在使用free后将指针赋值为NULL,否则指针将成为悬空指针。
像这样使用-
自由(tmp -> p);
你释放的是正确的,尽管通常你会有一个指向第一个节点的指针,然后沿着指针循环遍历列表。例如
struct node *first;
... list created, first pointing to first in list, where last next is == NULL ...
while (first != NULL)
{
struct node* next = first->next;
free( first->p );
free( first );
first = next;
}
btw为什么你声明p
为char*
而分配int ?输入错误?