地址0x93d1e2c是大小为2,048 alloc&#d; d的块之后的12个字节

时间:2015-10-07 20:12:58

标签: valgrind

我在代码上运行valgrind并看到两个错误。

地址0x93d1e2c在大小为2,048 alloc' d

的块之后是12个字节

我经历了所有的讨论,他们提到的所有地方都是#34;地址xyz是" 0"大小块<>,alloc' d"之后的字节。当有人分配X字节并将其强制转换为大小为Y字节且Y> 1的东西时,似乎会发生这种情况。 X.

那么当它说"块后面的12个字节&#34>是什么意思?而不是"块后的0字节"?有人可以帮忙吗?

谢谢, 尼尔

1 个答案:

答案 0 :(得分:3)

这意味着Valgrind在您的程序中检测到您分配的一块内存(通过malloc()或类似内容),并且该程序尝试访问该块后12字节的内存地址。

简而言之,这是一个数组越界错误,您尝试在实际数组数据之后访问数据。

按照以下行,您应该会看到一个callstack,它会大致指出程序中无效访问的位置:

Address 0x93d1e2c is 12 bytes after a block of size 2,048 alloc'd
// Details of the callstack should be here

/* Details of the allocation of 2048 bytes should also
   be present (separately) in Valgrind's output */