所以,我需要一些帮助。我正在使用C++开发一个项目。不过,我想我已经设法破坏了我的堆。这是基于我添加了一个std::string
一类的事实,从另一个std::string
分配一个值:内存管理,堆损坏和C++
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的东西是正确的,所以这是我所做的事情(或者一个错误,但没有选择的问题)。我确信我可以检查我写的代码,你很聪明的人很快就会看到这个问题,但我想把这种代码分析添加到我的'工具箱'中。
+1,很好的清单!然而,我反对#8 - 虽然它阻止了“坏”访问,但它实际上是一种代码异味,隐藏了我的经验中不良的逻辑或糟糕的对象生命周期管理...... – Roddy 2010-03-15 15:46:40
现在,C++在标准中有自己的智能指针库,所以不需要Boost或Loki。 – 2015-12-21 15:41:03