【发布时间】:2018-06-26 12:12:34
【问题描述】:
我正在使用 Valgrind 调试我的代码,当我通过将 struct 与 NULL 进行比较来测试 struct 是否已初始化时,我收到一条警告。
void main()
{
int *unassignedPointer;
if(unassignedPointer == NULL)
printf("This Pointer is NULL\n");
}
此代码可以编译并运行,但在通过 Valgrind 运行时会发出警告:条件跳转或移动取决于未初始化的值。将其与NULL 进行比较的重点是确定它是否已初始化。这是一种危险的做法,还是我应该忽略这些警告?
【问题讨论】:
-
将它与 NULL 进行比较的重点是确定它是否已初始化。 咦?!?!这完全没有意义。如果它没有被初始化,将它与 anything 进行比较是没有用的。
-
这是未定义的行为,因为指针没有获取指针本身的地址。见(Why) is using an uninitialized variable undefined behavior?。