Указатель NULL вызывает «Условный переход или перемещение зависит от неинициализированных значений» - PullRequest
0 голосов
/ 27 марта 2020

В проекте на 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.

...