在使用Visual Studio时,由于使用了未初始化的变量,因此出现运行时检查失败。这样的事情正在发生:
SomeStruct ss;
SomeOtherStruct sos = {ss};
稍后在代码中,我在实际使用它之前初始化sos.ss
。
我很欣赏Visual Studio捕获它,但这应该是一个警告,因为我并没有真正使用它,我只是传递它,而不是在运行程序时抛出运行时异常。
我正在使用C
而不是C++
但没有找到告诉VS使用C的方法(我需要手动放置.c文件并取消选中使用预编译的标头(。无论如何,我怎么能告诉VS停止抱怨这个异常。Unmarkins"抛出此异常类型时中断"通常不起作用(问题往往会再次出现(。
如果ss
包含未初始化的普通旧数据,则SomeOtherStruct sos = {ss};
的行为是未定义的,这些数据不是char
、unsigned char
或signed char
类型。
这是因为您在初始化 sos
时正在读取未初始化的数据。
因此,Visual Studio非常有帮助。
在 C 中,您可以编写SomeStruct ss = {0};
来解决此问题。在C++中,您可以删除0
。但是为什么您认为需要从未初始化的ss
初始化sos
?
您的基本错误是您似乎认为SomeOtherStruct sos = {ss};
会与sos
建立ss
的指针或"别名",以便在代码的稍后某个时刻初始化ss
时,您也会启动sos
。
但在 C 中情况并非如此。您只需将 ss
的所有值复制到 sos
,并且由于ss
未初始化,因此您将垃圾复制到 sos
.即使你以后初始化ss
,垃圾也会在那里。