首先 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 然后释放内存。
  • freereturn 之后永远不会被执行

我猜你想要的是

  1. 为return数据分配内存(或使用静态数组)
  2. 从队列中复制数据
  3. 队列结构中的空闲内存
  4. Return 指针(如果你不为它使用 static 缓冲区,则稍后必须 free