未初始化的字节瓦尔格林德投诉 - 莫名其妙
Uninitialised byte(s) Valgrind complaint - inexplicable
Valgrind 一直在抱怨未初始化的字节,通过减少查找一个最小的例子,我最终得到了这个:
#include <valgrind/memcheck.h>
struct dummyObject{
int foo;
bool bar;
dummyObject():foo(1),bar(true) {}
};
int main(){
dummyObject dummy;
VALGRIND_CHECK_VALUE_IS_DEFINED(dummy);
return 0;
}
有两个整数或两个布尔值,或者一个整数或布尔值,不会引起任何抱怨。看起来好像有一个不同类型成员的班级会导致瓦尔格林德抱怨。这不仅仅是因为我明确要求检查;在使用类似于 dummyObject 的对象的大型程序中,我收到"条件跳转或移动取决于未初始化的值"错误。
我的编译器是 4.7.3 位 Linux 上的 g++ 64,使用调试标志进行编译,没有优化 - 或者,它没有区别。
是我遗漏了什么,还是误报?
当您检查类型的大小时,您可能会发现大小与成员大小的总和不匹配。例如,在我的系统上,我得到:
sizeof(dummy)=8 sizeof(int)=4 sizeof(bool)=1
打印不同尺寸时。区别在于填充用于确保对象与系统可以轻松访问它们的地址对齐。可能是这个填充是未初始化的。
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 瓦尔格林德的内存泄漏使用新的
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 赫尔格林德和atomic_flag
- 删除堆后对瓦尔格林德错误感到困惑
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- 瓦尔格林德报告在 =带有嵌套shared_ptrs的运算符上的读取错误
- 瓦尔格林德:注意到但未处理的国际奥克特尔;是否有必要处理以及如何找到?
- 瓦尔格林德错误 - 地址0x0不是堆叠的 malloc'd 或自由的
- 瓦尔格林德错误来自 boost::asio
- 瓦尔格林德可能丢失了,仍然可以到达并被瓦尔格林德检测到并被抑制
- 在瓦尔格林德的泄漏摘要中使用 std::ios::sync_with_stdio(fasle) 打印时获取"still reachable"
- 瓦尔格林德"不支持arch_prctl选项"
- 有没有办法只从瓦尔格林德获得泄漏摘要?
- 瓦尔格林德 + --泄漏检查 -> 不泄漏摘要
- 我找不到瓦尔格林德告诉我的记忆链接
- 修复了瓦尔格林德错误内存泄漏的错误
- 未初始化的字节瓦尔格林德投诉 - 莫名其妙