C语言 如何释放存放指针的节点的内存



我有一个链接列表,其节点结构如下

  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为什么你声明pchar*而分配int ?输入错误?

相关内容

  • 没有找到相关文章

最新更新