我們最近在軟件中發現了一個嚴重的錯誤,這個錯誤是由於假設一個動態分配的數組被初始化爲零(而不是)。所以,問題是這樣的:Windows XP是否自動將數組初始化爲零?
int* foo = new int[1];
foo[0] += 10;
現在我想的估計,因爲最近我們也有我們的環境中進行一些更改這方面的影響:我們開始使用它運行不同的操作系統新的處理單元( Win XP之前,現在還在使用,現在除了一些運行Win 8的新單元外)。
在Win XP機器上運行的計算似乎沒有問題,但在Win 8上,相同的二進制文件會產生亂碼。所以編譯器不會初始化這些數組(這些都是經過優化的版本),但似乎Windows XP會將新分配的內存初始化爲零(而Windows 8不會)。這是有記錄的地方嗎?我能否相信這一點,以便我可以認爲這個問題不會影響以前在Win XP機器上執行的所有計算?
你是否也開始使用新的IDE? – dmg 2015-02-05 14:12:57
只需在每個這樣的分配末尾添加'()',以將數組歸零。應該不需要重新運行單元測試等等。依靠操作系統保證首先是充滿風險的,當你知道你必須支持一個你認識的平臺(Win 8)時,無論如何也不是一個前進的方向沒有這樣的保證。 – 2015-02-05 14:14:07
你在什麼平臺上編譯你的程序? – cybermonkey 2015-02-05 14:14:31