J'ai une classe A comme suit:C++ initialisation classe tableau instance
class A
{
public:
A()
{
printf("A constructed\n");
}
~A();
//no other constructors/assignment operators
}
Je les suivantes ailleurs
A * _a;
J'initialiser avec:
int count = ...
...
_a = new A[count];
et je avoir accès avec
int key = ....
...
A *a_inst = &(_a[key]);
....
Il s'exécute normalement, et le printf dans le constructeur est exécuté, et tous les champs dans A sont bien.
j'ai couru Valgrind avec les args suivants:
valgrind --leak-check=full --show-reachable=yes --track-origins=yes -v ./A_app
et Valgrind ne cesse de crier à propos
Conditional jump or move depends on uninitialised value(s)
puis la trace de la pile aux états de accesseurs.
Quelqu'un peut-il expliquer pourquoi cela se produit? Spécifiquement si ce que Valgrind dit est vrai, pourquoi le constructeur est-il exécuté?
Spécifiquement quelle ligne est signalée par valgrind, et quelle ligne est-elle l'origine de la valeur non initialisée? – mark4o
La valeur non initialisée a été créée par une allocation de tas. Et il pointe vers la ligne qui a été ajoutée au tableau. – jameszhao00
Et quelle ligne a été marquée comme dépendant de la valeur non initialisée? – mark4o