Visual Studio:正在使用变量而未初始化

Posted

技术标签:

【中文标题】Visual Studio:正在使用变量而未初始化【英文标题】:Visual Studio: Variable is being used without being initialized 【发布时间】:2018-01-23 11:40:52 【问题描述】:

在使用 Visual Studio 时,由于使用了未初始化的变量而导致运行时检查失败。正在发生这样的事情:

SomeStruct ss;
SomeOtherStruct sos = ss;

稍后在代码中,我在实际使用之前初始化sos.ss

我感谢 Visual Studio 捕捉到它,但这应该是一个警告,因为我并没有真正使用它,我只是将它传递给它,而不是在运行程序时抛出运行时异常。

我使用的是C 而不是C++,但还没有找到告诉VS 使用C 的方法(我需要手动放置.c 文件并取消选中使用预编译头文件)。无论如何,我怎样才能告诉 VS 停止抱怨这个异常。取消标记“抛出此异常类型时中断”通常不起作用(问题往往会再次出现)。

【问题讨论】:

有什么原因不能输入SomeStruct ss = 0; "...但这应该是一个警告,因为我并没有真正使用它..." 但是您确实使用它来构造SomeOtherStruct "我使用的是 C 而不是 C++,但还没有找到方法告诉 VS 使用 C" 项目属性 -> C/C++ -> 高级 -> 编译为-> 编译为 C 代码。 请注意,在此初始化之后,如果您更改ss,您不会更改sos。你的意思是*ss 吗? 【参考方案1】:

如果ss 包含不是charunsigned charsigned char 类型的未初始化的普通旧数据,则SomeOtherStruct sos = ss; 的行为未定义

这是因为你在sos的初始化中读取了未初始化的数据。

因此,Visual Studio 非常有用。

在 C 中,您可以编写 SomeStruct ss = 0; 来解决此问题。在 C++ 中,您可以删除 0。但是为什么你认为需要从未初始化的 ss 初始化 sos

【讨论】:

【参考方案2】:

您的基本错误是您似乎认为SomeOtherStruct sos = ss; 将使用sos 建立ss 的指针或“别名”,以便在稍后的代码中初始化ss,你也初始化sos

但在 C 中情况并非如此。您只需将所有 ss 的值复制到 sos 并且由于 ss 未初始化,您将垃圾复制到 sos。即使您稍后初始化ss,这些垃圾仍然存在。

【讨论】:

并非如此。出于某种原因,我的印象是,当我声明一个结构时,我需要将它传递给另一个结构,但它不是必需的。所以我可以删除ss,只需放入SomeOtherStructure sos 并稍后初始化其成员。

以上是关于Visual Studio:正在使用变量而未初始化的主要内容,如果未能解决你的问题,请参考以下文章

工具,Visual Studio 设置来检查未初始化的类成员

可以从 Visual Studio Online 中删除已完成的迭代吗?

Visual Studio 不允许我使用某些变量名

如何在 PHP 的 Visual Studio Code 中选择包括 $ 在内的整个变量名?

Microsoft Visual Studio Professional 2013,变量在哪里定义和编辑?

如何使用 Visual Studio 环境变量运行 Python 代码