В проекте на C ++ Valgrind говорит мне, что у меня есть « Условный переход или перемещение, зависящий от неинициализированных значений », которые я действительно не понимаю.
Поскольку проект слишком широкий и по юридическим причинам, я не могу скопировать / пропустить код. И я не знаю, как сделать небольшую программу, которая воспроизводит ошибку, потому что я действительно не понимаю ее!
Итак, вот функция, вызывающая мои проблемы. Все имена были заменены.
Object2* Object1::get_thing(optix::float3 startCoord) {
Object2* obj=NULL;
// this->objs is of type Object2*
if (this->objs!=NULL) { // <- This condition is false when Valgrind complains at the next if, but it never gives a Vagrind error
obj=this->objs->get_thing(startCoord);
}
else {
obj=NULL; // <- The program goes here
}
if (obj==NULL) { // <- Valgrind is complaining here
/* Do some stuff */
}
return obj;
}
Как видите, Valgrind выдает мне ошибку, когда я проверяю, является ли obj
NULL
. Но я шаг за шагом запускал код в GDB (с Valgrind), поэтому я знаю, что obj
равен NULL
, но когда я прихожу на тестовую линию, Valgrind жалуется.
Когда я устанавливаю --track-origins=yes
опция для Valgrind, она говорит мне, что переменная была размещена в стеке.
Я не прошу никого отлаживать мой код. Мне просто нравится иметь некоторые идеи причин, по которым он может выдавать эту ошибку в простом случае, подобном этому.
РЕДАКТИРОВАТЬ: Valgrind сообщает только о двух ошибках до этого, и они оба находятся в библиотеке Cuda.