Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?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