Visual Studio:正在使用变量而不进行初始化

时间:2018-01-23 11:40:53

标签: c++ c visual-studio

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

SomeStruct ss;
SomeOtherStruct sos = {ss};

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

我很欣赏Visual Studio捕获它,但这应该是一个警告,因为我没有真正使用它,我只是传递它而不是在我运行程序时抛出运行时异常。

我正在使用C而不是C++,但还没有找到告诉VS使用C的方法(我需要手动输入.c文件并取消选中使用预编译的标头)。无论如何,我怎么能告诉VS停止抱怨这个例外。 Unmarkins"在抛出此异常类型时中断"通常不起作用(问题往往会回来)。

2 个答案:

答案 0 :(得分:4)

如果SomeOtherStruct sos = {ss};包含未初始化的未经初始化的普通旧数据sschar或{{1},则unsigned char的行为未定义类型。

这是因为您在初始化signed char时正在阅读未初始化的数据。

因此,Visual Studio非常有用。

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

答案 1 :(得分:1)

您的基本错误是,您似乎认为SomeOtherStruct sos = {ss};ss与[{1}}建立指针或“别名”,以便在代码的某个稍后时刻,在初始化sos时,您还要初始化ss

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