2015-10-07 19 views
1

我在我的代码上运行valgrind,看到两个错误。地址0x93d1e2c是一个大小为2,048的块后的12个字节alloc'd

地址0x93d1e2c是alloc'd

尺寸2,048块我经历了所有的讨论跑去,到处都提到“地址xyz是‘大小<>,分配的块之后0’字节”后12个字节d”。当某人分配X字节并将其转换为Y字节和Y> X的大小时,似乎会发生这种情况。

那么它说“块后12个字节”而不是“0个字节后”块”?有人可以帮忙吗?

谢谢, 尼尔

回答

1

这意味着Valgrind的检测的存储器的一个块你alloc'd(通过malloc()或类似)在程序中,并且该程序试图访问的存储器地址,其是该块之后的12个字节。

总之,这是一个数组越界错误,你试图访问实际数组后的数据。

继以下行,你会看到一个调用堆栈,指示广泛你的程序中的无效访问情况:

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 */ 
+0

感谢了很多的答案。问题是我正在写(2048 + 12)字节,但只读2048字节。在我的程序中,2048字节实际上由许多小消息组成,每个字节都有自己的TLV。所以这导致让我读最后一个TLV的错误数据。在改变了iovec长度后,我使用了recvmsg(),不再看到这个问题。 – NeilB

相关问题