我有很多'无效的大小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','最近被释放'?
答案 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客户端请求?