我有一个 A 类如下:
class A
{
public:
A()
{
printf("A constructed\n");
}
~A();
//no other constructors/assignment operators
}
我在别处有以下内容
A * _a;
我初始化它:
int count = ...
...
_a = new A[count];
我用
访问它int key = ....
...
A *a_inst = &(_a[key]);
....
运行正常,执行构造函数中的printf,A中的所有字段都没有问题。
我使用以下参数运行 Valgrind:
valgrind --leak-check=full --show-reachable=yes --track-origins=yes -v ./A_app
Valgrind 一直在大喊
Conditional jump or move depends on uninitialised value(s)
然后是访问器语句的堆栈跟踪。
谁能解释为什么会这样? 具体来说,如果 Valgrind 所说的是真的,为什么要执行构造函数?
最佳答案
这可能意味着 key
或 count
包含未初始化的值。即使您确实在声明中对其进行了初始化,例如int key = foo + bar;
,可能是 foo
或 bar
未初始化,valgrind 将其传递给 key
。
关于C++类实例数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387101/