首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代码崩溃是因为一个未初始化的变量,即使我没有实际使用它

代码崩溃是因为一个未初始化的变量,即使我没有实际使用它
EN

Stack Overflow用户
提问于 2016-09-24 21:36:24
回答 1查看 184关注 0票数 1

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

代码语言:javascript
复制
void foo(void* ptr)
{

}

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

运行时检查失败#3 -变量'ptr‘在未初始化的情况下被使用。

我知道,可以通过将“基本运行时检查”选项设置为“默认”来禁用此错误,但当我实际上没有取消对指定指针的引用时,我看不到有任何理由需要此错误。

这是故意的行为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-24 21:40:45

即使只是传递一个指向函数的指针,您也在“使用”它,如果不初始化该值,它在技术上是未定义的行为。

原因是,在一些硬件平台中,指针在特殊寄存器中传递,使用无效值设置指针将在寄存器设置为时生成硬件陷阱,如果指针被实际使用,则不是何时使用指针。

解决方案不是禁用检查,而是在使用之前初始化指针。如果您不知道要使用的值,那么只需使用nullptr即可。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39681190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档