空闲内存分配在不同的功能?

我试图学习C,我目前正试图写一个基本的堆栈数据结构,但我似乎不能得到基本的malloc /自由权。

这里是我一直在使用的代码(我只是发布一小部分在这里说明一个具体的问题,而不是总代码,但错误消息只是通过运行这个示例代码在valgrind生成)

#include <stdio.h>
#include <stdlib.h>

typedef struct Entry {
    struct Entry *previous;
    int value;
} Entry;

void destroyEntry(Entry entry);

int main(int argc, char *argv[])
{
    Entry* apple;
    apple = malloc(sizeof(Entry));
    destroyEntry(*(apple));
    return 0;
}

void destroyEntry(Entry entry)
{
    Entry *entry_ptr = &entry;
    free(entry_ptr);
    return;
}

当我运行它通过valgrind与–leak-check = full –track-origins = yes,我得到以下错误:

==20674== Invalid free() / delete / delete[] / realloc()
==20674==    at 0x4028E58: free (vg_replace_malloc.c:427)
==20674==    by 0x80485B2: destroyEntry (testing.c:53)
==20674==    by 0x8048477: main (testing.c:26)
==20674==  Address 0xbecc0070 is on thread 1's stack

我认为这个错误意味着destroyEntry函数不允许修改在main中显式分配的内存。是对的吗?为什么我不能只释放我在主分配的另一个函数的内存? (并且这种行为以某种方式具体到主?)

每当将参数传递给函数时,都会进行副本,并且函数在该副本上工作。所以在你的情况下,你试图释放原始对象的副本,这没有任何意义。

你应该修改你的函数来获取一个指针,然后你可以直接在指针上调用它。

http://stackoverflow.com/questions/11071190/free-memory-allocated-in-a-different-function

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:空闲内存分配在不同的功能?