2011-10-18 80 views
0

我有一個類ν,其動態地分配雙打的陣列。條目是一個指向這個數組的開始的指針。間距讓我跳過條目,例如,如果我想只考慮每一個第三項,間距是3在標避免臨時變量操作

double& v::operator[] (const int n) { 
    return entries[n*spacing]; 
} 

這個下標操作編譯,但導致堆損壞。基於我的網絡搜索,我認爲Visual Studio將臨時的「entries [n * spacing]」的結果存儲起來,然後返回臨時引用。當我嘗試寫入此釋放內存的引用時發生堆損壞。

有沒有人有一種變通方法的想法?

回答

0

我認爲Visual Studio在臨時存儲「entries [n * spacing]」的結果,然後返回臨時對象的引用。

這是不正確。假設entries被定義爲double entries[];double* entries,那麼entries[i]返回一個引用,並且是由下標運算符返回的引用。

你的問題的根源是在其他地方。也許在n*spacing之外的數組範圍之外,或者整個entries被訪問時被釋放。

+0

進一步檢查發現條目是無效的。謝謝K-ballo。 – Kire321