2017-05-08 76 views
-2

在这个函数中我需要返回AND删除一个char值(释放分配的内存)。 这个功能有什么问题?首先返回空闲char值c

char* pqueue_poll(PrioQueue *queue) { 
     if (queue->root == NULL) { 
      return "NULL"; 
     } 

     else { 
      char* name = (char *) malloc(sizeof(char)*10); 
      q_elem *temp = queue->root; 

      name = temp->name;  
      queue->root = queue->root->next; 

      return name; 

      free(temp); 
      free(&temp->name); 
     } 
    } 

我尝试先释放并返回它,但没有结果,我与valgrind有一些错误。 我也有一个单独的函数(不删除),返回我想回到这里删除

+0

你如何期望从函数返回后释放东西? – John3136

+0

第一次免费并且返回也不起作用 – Dmitry

+0

你打电话'free(temp)',然后在下一行立即使用'temp'!虽然这些行都不可访问,因为您先返回。你似乎打算释放一些内存,并返回指向该内存的指针(显然这将不起作用) –

回答

2

这里的价值是一对夫妇的主要问题与您的代码

  • name = temp->name;将只设置char *name为指向你想要返回的字符串。您需要执行memcpy然后释放内存。
  • freereturn永远不会得到执行

后,我想你想要的是

  1. 从队列中分配内存的返回数据(或使用静态数组)
  2. 将数据复制
  3. 队列结构中的空闲内存
  4. 返回指针(哪一个必须是free以后如果你没有用static缓冲区的话)
+0

而不是分配空间,复制内存和释放旧的,你可以只返回旧的,而不是免费的... –

+0

@M.MYUP,另一种方式。我想,我只是将它复制到一些静态数组,并不在意它以后如何使用以避免内存泄漏。 – Elalfer