为什么以下代码在Visual 2012运行时崩溃?
void foo(void* ptr)
{
}
int main()
{
void* ptr;
foo(ptr);
}运行时检查失败#3 -变量'ptr‘在未初始化的情况下被使用。
我知道,可以通过将“基本运行时检查”选项设置为“默认”来禁用此错误,但当我实际上没有取消对指定指针的引用时,我看不到有任何理由需要此错误。
这是故意的行为吗?
发布于 2016-09-24 21:40:45
即使只是传递一个指向函数的指针,您也在“使用”它,如果不初始化该值,它在技术上是未定义的行为。
原因是,在一些硬件平台中,指针在特殊寄存器中传递,使用无效值设置指针将在寄存器设置为时生成硬件陷阱,如果指针被实际使用,则不是何时使用指针。
解决方案不是禁用检查,而是在使用之前初始化指针。如果您不知道要使用的值,那么只需使用nullptr即可。
https://stackoverflow.com/questions/39681190
复制相似问题