我在使用此代码段时遇到了一些问题。
size_t* defines = malloc(sizeof *defines);
if (!defines)
exit(1);
size_t def_cap = 1;
size_t def_size = 0;
...
for(condition) {
...
if (def_size == def_cap) {
void* tmp = realloc(defines, def_cap*=2);
if(!tmp)
exit(1);
defines = tmp;
}
defines[def_size++] = foo;
}
我得到一个" malloc.c:2842:mremap_chunk:断言`((size + offset)&(_rtld_global_ro._dl_pagesize - 1))== 0'失败&#34。我跑的时候出错了。 Valgrind告诉我在realloc调用中写入了大小为8的无效内容。发生了什么事? condition和foo是一堆文件解析的一部分,它不会使用或修改上面的任何变量。
答案 0 :(得分:3)
realloc
与malloc
一样需要多个字节,因此您需要像以前一样将条目数乘以sizeof(size_t)
:
def_cap *= 2;
void* tmp = realloc(defines, def_cap * sizeof *defines);