首页 > 解决方案 > NULL 指针导致“条件跳转或移动取决于未初始化的值”

问题描述

在一个 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;
}

如您所见,当我测试 if objis时,Valgrind 给了我错误NULL。但是我在 GDB 中一步一步地运行代码(使用 Valgrind),所以我知道那objNULL,但是当我到达测试线时,Valgrind 抱怨。

当我将--track-origins=yes选项设置为 Valgrind 时,它告诉我变量已在堆栈上分配。


我没有要求任何人调试我的代码。我只是想知道为什么它会在像这样的简单情况下给出这个错误的原因。

编辑:
Valgrind 在此之前只报告两个错误,它们都在 Cuda 库中。

标签: c++valgrind

解决方案


推荐阅读