实现Treap数据结构时Valgrind报内存泄漏,编写析构函数无效如何解决?
问题原因
- decTree类的构造函数中通过
new[]分配了两块堆内存:存储顶点实例的vertexs数组、存储顶点指针的ordered数组,没有为类实现正确的析构函数释放这两块内存,这是泄漏的直接来源。 - 如果你之前尝试编写过析构函数但无效,几乎都是因为配对错误:
new[]分配的数组必须用delete[]释放,如果你用了单个delete去释放数组内存,属于C++未定义行为,绝大多数场景下都会导致内存泄漏。
修复方案
给decTree类添加正确的析构函数即可:
class decTree{ // 原有私有成员、构造函数保持不变 public: // 新增析构函数 ~decTree() { delete[] ordered; delete[] vertexs; } };
额外注意
如果后续你需要为decTree实现拷贝构造、拷贝赋值运算符,必须自行实现深拷贝逻辑,否则编译器生成的默认浅拷贝函数会导致同一块堆内存被多次释放的问题,符合C++三五法则的要求。
内容的提问来源于stack exchange,提问作者user16949111
相关产品推荐
相关产品推荐

