【发布时间】:2017-06-29 04:40:02
【问题描述】:
uint32_t * newArr = realloc( myStruct->arr, 2 * muStruct->Capacity * sizeof(myStruct->arr) )
if (newArr == null)
{
free(myStruct->arr);
return false;
}
else
{
myStruct->arr = newArr;
myStruct->Capacity *= 2;
...
Valgrind 对此表示:
Address 0x51f7c80 is 0 bytes after a block size of 80 alloc'd
at 0x4C2BB78: realloc (vg_replace malloc.c:785)
这里发生了什么?是我的 newArr == null 案例吗?
【问题讨论】:
-
它不是在抱怨
realloc,而是在代码后面的东西。 -
您提供的 valgrind 输出片段并不是对您的
realloc()呼叫的抱怨。它只是其关于访问违规的报告的信息附录。 -
sizeof(myStruct->arr)是指针的大小,而不是它指向到的类型。 -
...因此,您可能没有按预期分配尽可能多的内存,并随后在分配之外写入。
标签: c memory valgrind heap-memory realloc