首先 return 比自由字符值 c
First return than free char value c
在这个函数中,我需要 return 并删除一个 char 值(释放分配的内存)。
这个函数有什么问题?
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);
}
}
我先尝试释放然后 return 但没有结果,我在 valgrind 上遇到了一些错误。
我还有一个单独的函数(不删除),return 是我想要的值 return 并在此处删除
您的代码存在几个主要问题
name = temp->name;
只会将 char *name
设置为指向您想要 return 的字符串。您需要执行 memcpy
然后释放内存。
free
在 return
之后永远不会被执行
我猜你想要的是
- 为return数据分配内存(或使用静态数组)
- 从队列中复制数据
- 队列结构中的空闲内存
- Return 指针(如果你不为它使用
static
缓冲区,则稍后必须 free
)
在这个函数中,我需要 return 并删除一个 char 值(释放分配的内存)。 这个函数有什么问题?
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);
}
}
我先尝试释放然后 return 但没有结果,我在 valgrind 上遇到了一些错误。 我还有一个单独的函数(不删除),return 是我想要的值 return 并在此处删除
您的代码存在几个主要问题
name = temp->name;
只会将char *name
设置为指向您想要 return 的字符串。您需要执行memcpy
然后释放内存。free
在return
之后永远不会被执行
我猜你想要的是
- 为return数据分配内存(或使用静态数组)
- 从队列中复制数据
- 队列结构中的空闲内存
- Return 指针(如果你不为它使用
static
缓冲区,则稍后必须free
)