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