第一次返回的值大于自由字符值c
在这个函数中,我需要返回并删除一个char值(释放分配的内存)。 这个函数有什么问题第一次返回的值大于自由字符值c,c,memory,return,free,C,Memory,Return,Free,在这个函数中,我需要返回并删除一个char值(释放分配的内存)。 这个函数有什么问题 char* pqueue_poll(PrioQueue *queue) { if (queue->root == NULL) { return "NULL"; } else { char* name = (char *) malloc(sizeof(char)*10); q_elem
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有一些错误。
我还有一个单独的函数(不删除),它返回我想要返回并删除的值
只需将name=temp->name
设置为指向要返回的字符串。您需要执行char*name
,然后释放内存memcpy
afterfree
永远不会执行return
静态缓冲区,则稍后必须释放该指针)
从函数返回后,您希望如何释放内容?首先释放,然后返回也不起作用您调用
free(temp)
,然后立即在下一行中使用temp
!尽管这两行都无法访问,因为您首先返回了。此外,您似乎还打算释放一些内存,并返回指向该内存的指针(显然这不起作用),将返回逻辑更改为:char*name=temp->name;免费(临时);返回名称
@Dmitry你不能释放内存然后使用释放的内存,而不是分配空间、复制内存和释放旧内存,你可以只返回旧内存而不释放…@M.M是的,另一种方法。我想,我只是把它复制到某个静态数组中,而不在乎以后如何使用它来避免内存泄漏。