我不明白释放是如何进行的。我知道当我尝试两次释放内存时会发生这种情况。然而,这真的难倒了我。
我试着只发布代码的相关部分。
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/