我正在使用從Visual C++ 6.0移植到VC++ 9.0(2008)的遺留代碼。我使用_CRT_SECURE_NO_WARNINGS
預處理器定義禁用了安全的CRT警告。但是這會導致破壞者在std::vector
崩潰。定義_CRT_SECURE_NO_WARNINGS導致向量析構函數崩潰
使用中的任何問題_CRT_SECURE_NO_WARNINGS
?
我正在使用從Visual C++ 6.0移植到VC++ 9.0(2008)的遺留代碼。我使用_CRT_SECURE_NO_WARNINGS
預處理器定義禁用了安全的CRT警告。但是這會導致破壞者在std::vector
崩潰。定義_CRT_SECURE_NO_WARNINGS導致向量析構函數崩潰
使用中的任何問題_CRT_SECURE_NO_WARNINGS
?
它是如何崩潰?這聽起來更像是你在一個位置有內存覆蓋你的向量中的內存,然後釋放它,然後釋放你的向量。我會看指向任何地方。既然你現在在一個符合標準的編譯器上,用boost共享指針或boost數組替換它們。任何消除指針算術需求的地方,迭代器會更安全。
這些都是不相關的問題。 _CRT_SECURE_NO_WARNINGS
僅抑制棄用警告,它不會更改程序行爲。你必須調試實際的問題。
你絕對是其中之一,需要快速和骯髒的解決方案,以「讓它工作」任何方式。糟糕的做法。不要定義該指令來隱藏警告,而是在代碼中啓用所有警告(級別4 - /W4
),並努力刪除所有警告。通過消除由它們引起的所有可能的警告和副作用,使您的代碼更健壯。在VC6和最新的VC編譯器之間有着巨大的區別 - 在VC6中完美的工作可能現在不起作用,它不是最新的編譯器的錯誤,而是代碼的錯誤。編譯器/調試器有助於及早發現缺陷(在開發/調試階段)。
我也建議你運行一些靜態分析(如使用/analyze
開關的更高版本的Visual Studio中的代碼分析,如果有的話)。您還應該在代碼上運行動態代碼分析以查找更多問題。
堆損壞不需要預處理器定義來以字節爲單位。 –