2

我在Visual Studio Enterprise中编写我的C++作业。但是,我注意到,当我在linux中运行我的代码以检查不同的平台时,我会因为Visual Studio而出现错误,无论您如何处理变量,都会将所有变量初始化为零。例如,我忘记将链接列表练习中的头指针设置为nullptr,VS仍然运行良好,但是linux没有。我真的希望能够更早地捕获这些错误,那么有没有办法在VS中自动初始化?Visual Studio:禁用自动初始化

感谢

+1

VS只在调试版本中这样做。测试你的发布版本。 –

+0

正如我所记得的,问题更多的是相反的,g ++打算通过归零局部变量来提供“熊的帮助”。无论如何,解决方案是采用更严格的编程实践。 –

+0

@Y。 Lou当使用具有自动存储持续时间的未初始化变量时,通常编译器会发出警告。看看你是否可以改变MS VC++的警告级别。 –

回答

0

可以解决一些使用Visual Studio的设置问题。

转到ProjectProperties -> C/C++ -> General -> Treat Warning as Error 并将其设置为True

我可能不能完全解决你的问题,但会帮助你提前赶几个错误。

希望这会有所帮助。

+0

也将警告级别提升到'/ W4'。 –

0

在潜在的问题而言,调用malloc是什么原因造成的不一致(请注意,operator new使用malloc内部)。在malloc的文档中,它明确指出内存未被初始化。但是,操作系统/运行时可能会自动插入并初始化内存,VS调试运行时就是这种情况,但在跨平台开发中不应该依赖这种情况。

有一致的行为,你可以改为分配与calloc内存(并覆盖operator new使用calloc,而不是malloc)。当然,这意味着您将在程序中使用一些周期来初始化内存。或者,你可以用'垃圾'填充malloc的分配内存,这也是寻找内存初始化问题的常用策略。

在Visual Studio中检测它而不替换分配器的方面,请确保将“基本运行时检查”设置为“Both/RTC1”或“未初始化变量/ RTCu”。在某些情况下,虽然不能保证,但是在使用成员而未被初始化的情况下,这应该会在调试器中暂停。有关此检测将发生的情况的更多信息,请参阅here