У меня есть класс A следующим образом:Класс C++ массив экземпляра инициализации
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)
и затем трассировки стека на заявления Accessors.
Может ли кто-нибудь объяснить, почему это происходит? В частности, если то, что говорит Вальгринд, верно, почему конструктор выполнен?
В частности, какая строка отмечена valgrind, и какая строка говорит о ней, является источником неинициализированного значения? – mark4o
Неинициализированное значение было создано распределением кучи. И он указывает на строку, которая обновила массив. – jameszhao00
И какая строка была отмечена как зависящая от неинициализированного значения? – mark4o