【发布时间】:2010-09-05 16:06:25
【问题描述】:
所以,我需要一些帮助。我正在使用 C++ 开发一个项目。但是,我想我已经设法破坏了我的堆。这是基于我向一个类添加了一个std::string 并从另一个std::string 为其分配一个值的事实:
std::string hello = "Hello, world.\n";
/* exampleString = "Hello, world.\n" would work fine. */
exampleString = hello;
我的系统因堆栈转储而崩溃。所以基本上我需要停止并检查我所有的代码和内存管理的东西,找出我搞砸的地方。代码库仍然很小(大约 1000 行),所以这很容易实现。
不过,我对这种东西感到头疼,所以我想我会把它扔在那里。我在 Linux 系统上使用valgrind,虽然不完全了解我在做什么,但它确实报告了std::string 的析构函数是无效的。我不得不承认从谷歌搜索中得到了“堆损坏”这个词;任何关于这类东西的通用文章也将不胜感激。
(在rm -rf ProjectDir 之前,在 C# 中再做一次:D)
编辑: 我还没有说清楚,但我要求的是诊断这类记忆问题的方法。我知道 std::string 的东西是正确的,所以这是我做过的事情(或者是一个错误,但 Select 没有问题)。我确信我可以检查我编写的代码,你们非常聪明的人很快就会发现问题,但我想将这种代码分析添加到我的“工具箱”中。
【问题讨论】:
标签: c++ memory stack heap-memory