c - munmap_chunk() : invalid pointer error

标签 c memory-management malloc free

我不明白释放是如何进行的。我知道当我尝试两次释放内存时会发生这种情况。然而,这真的难倒了我。

我试着只发布代码的相关部分。

FILE* file = fopen(path, "r");
if (file == NULL)
{
    error(500);
    return;
}

// load file's content
BYTE* content;
size_t length;
if (load(file, &content, &length) == false)
{
    error(500);
    return;
}

这是加载函数

bool load(FILE* file, BYTE** content, size_t* length)
{
    printf("\nLOAD STARTED\n");
    content = NULL;
    BYTE *data = NULL;
    int size = 0;
    while(!feof(file))
    {
        char ch = fgetc(file);
        size += 1;
        data = realloc(data, sizeof(BYTE) * (size));
        *(data + (size - 1)) = ch;
    }
    content = &data;
    *length = size;
    printf("\nLOAD ENDED\n");
    return true;
}

稍后我调用 free()

printf("\nFREEING CONTENT\n");
// free file's content
free(content);
printf("\nCONTENT FREED\n");

printf 语句 FREEING CONTENT 起作用之后我得到了

munmap_chunk():无效指针 错误。

最佳答案

问题是:

content = &data;

它分配函数返回后超出范围的局部变量的地址。由于 content 是函数参数,因此不会将任何内容写入它指向的位置。你是想写吗

*content = data;

相反?如果是这样,你不应该设置 content = NULL 因为你想使用通过调用 load(file, &content, &length) 传递的地址。

关于c - munmap_chunk() : invalid pointer error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664474/

相关文章:

c - 如何正确分配新的字符串值?

Java 内存泄漏 - FileReaders、BufferedReaders 和 Stacks

c - 打开本地目录/文件夹中的所有文件

c - 如何确保函数在内核模块中运行?

c++ - 使用 'new' 在 C++ 中动态分配内存?

c - C 中释放三维数组时的 SIGTRAP

c++ - 即使使用 malloc,两个 char * 也可以具有相同的内存地址吗?

c - malloc 边界大小 : is there a performance difference

c - 程序在 FD_SET 宏 (select()) 中挂起

c++ - 在作用域生存期之前调用C++析构函数