代码因未初始化的变量而崩溃,即使我实际上并没有使用它
Code crashes because of an uninitialized variable even if I don't actually use it
为什么以下代码在 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" 来禁用此错误,但是当我实际上没有取消引用时,我看不出有任何理由会出现此错误指定的指针。
这是故意的行为吗?
即使只是传递一个指向函数的指针,你也是 "using" 它,如果该值未初始化,这在技术上是未定义的行为。
原因是有些硬件平台在特殊寄存器中传递指针,将它们设置为无效值会产生硬件陷阱当寄存器被设置时,不是何时以及是否实际使用指针。
解决方法不是禁用检查,而是在使用前初始化指针。如果您不知道要使用的值,那么就选择 nullptr
.
为什么以下代码在 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" 来禁用此错误,但是当我实际上没有取消引用时,我看不出有任何理由会出现此错误指定的指针。
这是故意的行为吗?
即使只是传递一个指向函数的指针,你也是 "using" 它,如果该值未初始化,这在技术上是未定义的行为。
原因是有些硬件平台在特殊寄存器中传递指针,将它们设置为无效值会产生硬件陷阱当寄存器被设置时,不是何时以及是否实际使用指针。
解决方法不是禁用检查,而是在使用前初始化指针。如果您不知道要使用的值,那么就选择 nullptr
.