代码因为未初始化的变量而崩溃,即使我实际上没有使用它

时间:2016-09-24 21:36:24

标签: c++ visual-studio visual-c++ visual-studio-2012 language-lawyer

为什么以下代码在Visual Studio 2012中的运行时崩溃?

void foo(void* ptr)
{

}

int main()
{
  void* ptr;
  foo(ptr);
}
  

运行时检查失败#3 - 正在使用变量'ptr'   被初始化。

我知道可以通过将“基本运行时检查”选项设置为“默认”来禁用此错误,但是当我实际上没有取消引用指定的指针时,我没有看到任何原因导致出现此错误。< / p>

这是一种有意的行为吗?

1 个答案:

答案 0 :(得分:3)

即使只是将一个指针传递给你正在“使用”它的函数,如果没有初始化该值,它在技术上是未定义的行为。

原因是存在硬件平台,其中指针在特殊寄存器中传递并且使用无效值设置它们将在寄存器设置时生成硬件陷阱,而不是指针何时指针实际上是用过的。

解决方案不是禁用检查,而是在使用它们之前初始化指针。如果您不知道要使用的值,请转到nullptr