相关疑难解决方法(0)

内存管理,堆腐败和C++

所以,我需要一些帮助.我正在用C++开发一个项目.但是,我想我已经设法破坏了我的堆.这是基于我std::string向一个类添加了一个并从另一个类中赋值的事实std::string:

std::string hello = "Hello, world.\n";
/* exampleString = "Hello, world.\n" would work fine. */
exampleString = hello;
Run Code Online (Sandbox Code Playgroud)

使用堆栈转储在我的系统上崩溃.所以基本上我需要停下来查看我的所有代码和内存管理内容,找出我搞砸了的地方.代码库仍然很小(约1000行),因此这很容易实现.

不过,我对这种东西感到头疼,所以我想我会把它扔出去.我在一个Linux系统上并且已经四处乱窜valgrind,虽然我不知道我在做什么,但它确实报告说它std::string的析构函数是无效的.我不得不承认从谷歌搜索中获得"堆腐败"一词; 关于这类东西的任何通用文章也将受到赞赏.

(之前rm -rf ProjectDir,在C#再做一次:D)

编辑:我还没有说清楚,但我要求的是诊断这些记忆问题的建议.我知道std :: string的内容是正确的,所以这是我做过的事情(或者是一个bug,但是选择不是问题).我确信我可以查看我编写的代码,你很聪明的人会立即看到问题,但我想将这种代码分析添加到我的'工具箱'中,就像它一样.

c++ memory heap stack

18
推荐指数
3
解决办法
1万
查看次数

C++中不稳定错误的最常见原因是什么?

我目前正在开发一个大型项目,我大部分时间都在调试.虽然调试是一个正常的过程,但是存在不稳定的错误,这些错误对于开发人员来说是最大的痛苦.该程序不起作用,有时候......有时它确实如此,而且你无能为力.

可以对这些错误做些什么?最常见的调试工具(交互式调试器,监视器,日志消息)可能无处可导,因为错误将消失...只是再次出现,稍后再出现.这就是为什么我要求一些启发式方法:这些错误最常见的原因是什么?我们应该调查哪些可疑代码来找到这样的错误?

让我开始列表:

  1. 使用未初始化的变量.常见的印刷错误,如mMember = mMember;
  2. 线程同步.有时它可能是运气的问题;
  3. 使用非智能指针,取消引用无效指针;

还有什么?

c++ debugging

6
推荐指数
3
解决办法
3060
查看次数

标签 统计

c++ ×2

debugging ×1

heap ×1

memory ×1

stack ×1