我在Visual Studio Enterprise中编写C ++分配代码。但是,我注意到当我在linux中运行我的代码以检查不同的平台时,我会有错误,因为visual studio,无论你如何处理变量,都将所有变量初始化为零。例如,我忘了将链接列表练习中的头指针设置为nullptr,VS仍然运行良好,但linux没有。我真的希望能够更早地捕获这些错误,那么有没有办法在VS中禁用这种自动初始化?
由于
答案 0 :(得分:1)
https://msdn.microsoft.com/en-us/library/jj161081.aspx
您是否尝试过停用SDL?
右键clikc您的项目=>属性=> C / C ++ =>代码生成=>安全检查=>禁用安全检查。
答案 1 :(得分:0)
您可以使用visual studio设置解决一些问题。
转到ProjectProperties -> C/C++ -> General -> Treat Warning as Error
并将其设置为True
我可能无法完全解决您的问题,但会帮助您事先发现一些错误。
希望这会有所帮助。
答案 2 :(得分:0)
就基础问题而言,对malloc
的调用是导致不一致的原因(请注意operator new
在内部使用malloc
。在malloc
的文档中,它明确指出内存未初始化。但是,OS /运行时可以自动干预和初始化内存,就像VS调试运行时一样,但在跨平台开发中不应该依赖它。
要获得一致的行为,您可以使用calloc
分配内存(并覆盖operator new
以使用calloc
代替malloc
)。当然,这意味着您将在程序中使用一些循环来初始化内存。或者,您可以使用'垃圾来填充malloc
中分配的内存,这也是查找内存初始化问题的常用策略。
在不更换分配器的情况下检测它,在Visual Studio中,确保您有"基本运行时检查"设置为" Both / RTC1"或"未初始化的变量/ RTCu"。在某些情况下使用成员而不进行初始化时,这应该可以让您在调试器中中断,尽管它不能保证。有关发生此检测的情况的详细信息,请参阅here。