Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两年前关闭。
我对这段代码有点问题。
我得到一个“malloc.c:2842:mremap_chunk:Assertion`((size+offset)&(_rtld_global_ro._dl_pagesize-1))==0'失败。”运行时出错。Valgrind告诉我realloc调用中有一个8大小的无效写入。发生什么事?condition和foo是一堆不使用或修改上述任何变量的文件解析的一部分。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
两年前关闭。
我对这段代码有点问题。
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:Assertion`((size+offset)&(_rtld_global_ro._dl_pagesize-1))==0'失败。”运行时出错。Valgrind告诉我realloc调用中有一个8大小的无效写入。发生什么事?condition和foo是一堆不使用或修改上述任何变量的文件解析的一部分。
最佳答案
realloc
占用的字节数与malloc
相同,因此您需要将条目数乘以sizeof(size_t)
,如下所示:
def_cap *= 2;
void* tmp = realloc(defines, def_cap * sizeof *defines);
09-04 16:36