私は次のようにクラス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
とヴァルグリンドは叫び続けます
Conditional jump or move depends on uninitialised value(s)
次に、アクセサステートメントへのスタックトレース。
なぜこれが起こっているのか誰でも説明できますか?具体的には、Valgrind の発言が正しい場合、コンストラクターが実行されるのはなぜですか?