munmap_chunk():无效指针错误

时间:2016-04-16 12:57:06

标签: 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(): invalid pointer错误。

2 个答案:

答案 0 :(得分:0)

这是问题所在:

content = &data;

它在函数返回后指定超出范围的局部变量的地址。由于内容是一个函数参数,因此不会将任何内容写入指向的位置。你的意思是写

*content = data;

代替?如果是这样,则不应设置content = NULL,因为您要使用通话load(file, &content, &length)传递的地址。

答案 1 :(得分:-1)

我设法解决了这个问题。 content基本上只是char*。所以,我试过这个并且它有效......

我将content = &data更改为content = &(data[0])

有效。欣赏所有输入。 :d