第一次返回的值大于自由字符值c

第一次返回的值大于自由字符值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值(释放分配的内存)。 这个函数有什么问题

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
    ,然后释放内存
  • free
    after
    return
    永远不会执行
我猜你想要的是

  • 为返回数据分配内存(或使用静态数组)
  • 从队列中复制数据
  • 队列结构中的可用内存
  • 返回指针(如果未使用
    静态
    缓冲区,则稍后必须释放该指针)

  • 从函数返回后,您希望如何释放内容?首先释放,然后返回也不起作用您调用
    free(temp)
    ,然后立即在下一行中使用
    temp
    !尽管这两行都无法访问,因为您首先返回了。此外,您似乎还打算释放一些内存,并返回指向该内存的指针(显然这不起作用),将返回逻辑更改为:
    char*name=temp->name;免费(临时);返回名称
    @Dmitry你不能释放内存然后使用释放的内存,而不是分配空间、复制内存和释放旧内存,你可以只返回旧内存而不释放…@M.M是的,另一种方法。我想,我只是把它复制到某个静态数组中,而不在乎以后如何使用它来避免内存泄漏。