2010-03-24 109 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