我在Visual Studio Enterprise中编写我的C++作业。但是,我注意到,当我在linux中运行我的代码以检查不同的平台时,我会因为Visual Studio而出现错误,无论您如何处理变量,都会将所有变量初始化为零。例如,我忘记将链接列表练习中的头指针设置为nullptr,VS仍然运行良好,但是linux没有。我真的希望能够更早地捕获这些错误,那么有没有办法在VS中自动初始化?Visual Studio:禁用自动初始化
感谢
我在Visual Studio Enterprise中编写我的C++作业。但是,我注意到,当我在linux中运行我的代码以检查不同的平台时,我会因为Visual Studio而出现错误,无论您如何处理变量,都会将所有变量初始化为零。例如,我忘记将链接列表练习中的头指针设置为nullptr,VS仍然运行良好,但是linux没有。我真的希望能够更早地捕获这些错误,那么有没有办法在VS中自动初始化?Visual Studio:禁用自动初始化
感谢
可以解决一些使用Visual Studio的设置问题。
转到ProjectProperties -> C/C++ -> General -> Treat Warning as Error
并将其设置为True
我可能不能完全解决你的问题,但会帮助你提前赶几个错误。
希望这会有所帮助。
也将警告级别提升到'/ W4'。 –
https://msdn.microsoft.com/en-us/library/jj161081.aspx
你有没有尝试禁用SDL?
Right clikc your Project => Properties => C/C++ =>代码生成=>安全检查=>禁用安全检查。
非常感谢!这有助于赶上我的nullptr错误! –
在潜在的问题而言,调用malloc
是什么原因造成的不一致(请注意,operator new
使用malloc
内部)。在malloc
的文档中,它明确指出内存未被初始化。但是,操作系统/运行时可能会自动插入并初始化内存,VS调试运行时就是这种情况,但在跨平台开发中不应该依赖这种情况。
有一致的行为,你可以改为分配与calloc
内存(并覆盖operator new
使用calloc
,而不是malloc
)。当然,这意味着您将在程序中使用一些周期来初始化内存。或者,你可以用'垃圾'填充malloc
的分配内存,这也是寻找内存初始化问题的常用策略。
在Visual Studio中检测它而不替换分配器的方面,请确保将“基本运行时检查”设置为“Both/RTC1”或“未初始化变量/ RTCu”。在某些情况下,虽然不能保证,但是在使用成员而未被初始化的情况下,这应该会在调试器中暂停。有关此检测将发生的情况的更多信息,请参阅here。
VS只在调试版本中这样做。测试你的发布版本。 –
正如我所记得的,问题更多的是相反的,g ++打算通过归零局部变量来提供“熊的帮助”。无论如何,解决方案是采用更严格的编程实践。 –
@Y。 Lou当使用具有自动存储持续时间的未初始化变量时,通常编译器会发出警告。看看你是否可以改变MS VC++的警告级别。 –