Valgrind读取大小为4,但不是越界,也不是堆叠&#d; dd,malloc&d;或(最近)免费&#d; dd

时间:2017-06-27 01:33:08

标签: valgrind

我有很多'无效的大小N'在Ubuntu 64位上用Valgrind-3.11.0运行用C ++编写的程序。

错误消息如下所示,不同的N,其中N在1,4,8之间变化。

Invalid read of size N.
Address 0xblahblah is 88 bytes inside a block of size 176 alloc'd

大小为176的块是使用new运算符分配的C ++类对象,N的大小足够小,因此它不会超出范围。 那么为什么Valgrind没有告诉我没有堆积的原因'而不是malloced','最近被释放了?'

有没有人知道为什么Valgrind认为这是一个无效的阅读,因为没有像“没有堆叠”这样的消息,而且#39;没有malloced','最近被释放'?

1 个答案:

答案 0 :(得分:0)

N对应于基础原始数据类型的大小。粗略地说,1将是char或bool,4将是和int或float,8将是long int,double或pointer。

XX bytes inside a block of size YY alloc'd

首先,这意味着内存是动态的(在堆上),而不是自动的(堆栈上的〜)。其次,您知道分配的对象的大小。如果你知道每个对象的大小(你可以使用sizeof来获得它),那么你可以计算出分配了多少个对象。

此前还有其他严重错误吗?

您是否在代码中使用任何Valgrind客户端请求?