2010-03-24 111 views
1

我有以下代碼:使用導致「周圍的變量‘結果’堆棧已損壞」

std::string Utils::get() { 
    std::string result; 
    result.append(1, 'x'); 
    result.append(1, 'x'); 
    result.append(1, 'x'); 
    return result; 
} 

我希望「XXX」歸還。

然而,當我在調試模式下運行,我得到警告

「堆棧周圍的變量‘結果’已損壞」

我使用附加功能走錯了路?

+0

它適用於我,所以問題似乎並沒有在該代碼中。調用函數是什麼樣的? – 2010-03-24 04:00:03

+0

當它注意到腐敗時它會告訴你嗎?在功能輸入,退出或其他地方? – 2010-03-24 04:07:32

+1

(哦,還有Yay Doraemon!) – 2010-03-24 04:19:19

回答

2

您使用append是正確的。其他的東西(可能在調用函數之前等)正在破壞堆棧。只有當你更多地使用堆棧(在這種情況下是一個函數調用)它纔會檢測到它。

你在Release中看不到它的原因是因爲函數調用是(可能)內聯的。 Ergo,堆棧不像現在那樣被操縱,結果是不同的。發佈一些更多的上下文,我們會幫助你追蹤它。

+0

Opps。重建整個源代碼,問題消失。我的錯。 – 2010-03-24 04:53:04