c++ - 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 obj
is时,Valgrind 给了我错误NULL
。但是我在 GDB 中一步一步地运行代码(使用 Valgrind),所以我知道那obj
是NULL
,但是当我到达测试线时,Valgrind 抱怨。
当我将--track-origins=yes
选项设置为 Valgrind 时,它告诉我变量已在堆栈上分配。
我没有要求任何人调试我的代码。我只是想知道为什么它会在像这样的简单情况下给出这个错误的原因。
编辑:
Valgrind 在此之前只报告两个错误,它们都在 Cuda 库中。
解决方案
推荐阅读
- c++ - 无法在 VS2017 中打开 DirectX 11 应用程序(通用 Windows)模板 - HResult 0x80042003
- python - 在执行操作时获取单独子数组中的 numpy 子数组的结果,而不使用 for 循环
- python - 在熊猫中,如何将一系列浮点数或无浮点数转换为带整数的字符串
- unit-testing - JEST中参数和返回的使用
- marklogic - 如何使用路径范围索引搜索空值?
- node.js - 无法读取节点 js 中未定义的属性“管道”
- javascript - 将超出列表项移动到引导程序中的下一列
- c# - 如何刷新 GridView 内容?
- css - 对某些部分使用另一个 CSS 框架
- javascript - Vue.js 和 Axios - 在 401 上重定向