我在代码上运行valgrind并看到两个错误。
地址0x93d1e2c在大小为2,048 alloc' d
的块之后是12个字节我经历了所有的讨论,他们提到的所有地方都是#34;地址xyz是" 0"大小块<>,alloc' d"之后的字节。当有人分配X字节并将其强制转换为大小为Y字节且Y> 1的东西时,似乎会发生这种情况。 X.
那么当它说"块后面的12个字节&#34>是什么意思?而不是"块后的0字节"?有人可以帮忙吗?
谢谢, 尼尔
答案 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 */