我有一个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 所说的是真的,为什么要执行构造函数?