在 realloc 调用中写入无效
Invalid write in realloc call
我在使用这段代码时遇到了一些问题。
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' failed." 错误。 Valgrind 告诉我在 realloc 调用中有一个大小为 8 的无效写入。这是怎么回事? condition 和 foo 是一堆文件解析的一部分,不使用或修改上述任何变量。
realloc
和 malloc
一样占用多个字节,所以你需要像以前一样将条目数乘以 sizeof(size_t)
:
def_cap *= 2;
void* tmp = realloc(defines, def_cap * sizeof *defines);
我在使用这段代码时遇到了一些问题。
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' failed." 错误。 Valgrind 告诉我在 realloc 调用中有一个大小为 8 的无效写入。这是怎么回事? condition 和 foo 是一堆文件解析的一部分,不使用或修改上述任何变量。
realloc
和 malloc
一样占用多个字节,所以你需要像以前一样将条目数乘以 sizeof(size_t)
:
def_cap *= 2;
void* tmp = realloc(defines, def_cap * sizeof *defines);