为什么以下代码在 Visual Studio 2012 中运行时崩溃?
void foo(void* ptr)
{
}
int main()
{
void* ptr;
foo(ptr);
}
Run-Time Check Failure #3 - The variable 'ptr' is being used without being initialized.
我知道可以通过将“Basic Runtime Checks”选项设置为“Default”来禁用此错误,但是当我实际上没有取消引用指定的指针时,我看不出有任何理由会出现此错误。
这是有意的行为吗?
最佳答案
即使只是将指针传递给您正在“使用”它的函数,如果该值未初始化,这在技术上是未定义的行为。
原因是在某些硬件平台上,指针在特殊寄存器中传递,并且将它们设置为无效值会在设置寄存器时产生硬件陷阱,而不是何时以及是否指针实际使用。
解决方案不是禁用检查,而是在使用前初始化指针。如果您不知道要使用的值,那么只需使用 nullptr
。
关于c++ - 代码因未初始化的变量而崩溃,即使我实际上并没有使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681190/