gpt4 book ai didi

c++ - 使用基类指针删除派生类时内存泄漏

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:52 25 4
gpt4 key购买 nike

我遇到内存泄漏问题。我有一个基类指针。从中,我使用 new 来分配不同的派生类。然后,当我尝试使用引用(未类型转换)删除 那些类时,出现内存泄漏。我研究了这个问题,发现我应该向基类添加一个虚拟析构函数,但我试过了,但仍然有内存泄漏;也就是说,根据我的任务管理器,每次使用基类指针分配和删除派生类时,内存使用量都会继续增加。我尝试使它成为抽象析构函数并向派生类添加析构函数,但出现 undefined reference 错误。我还尝试将指针类型转换为 delete 的派生类指针,但显然这会使程序崩溃。

有人知道我应该做什么吗?

示例代码:

class A {
public:
A();
~A() {};
virtual ~A(); /*or*/
virtual ~A()=0; /*or*/
/*or nothing?*/
}

class B: private A {
public:
B();
~B() {}; /*this?*/
/*or nothing?*/
}

最佳答案

您如何确定确实存在内存泄漏?通常,任务管理器在这里帮不上什么忙,因为它无法判断属于您的进程的内存实际分配了多少。即使被释放的内存仍然属于您的进程,并且以后可能会被内存管理(通常是类似 malloc 的系统库)使用。

使用诸如 mallocdebug、valgrind、purify 等工具来查明是否真的存在内存泄漏。这些工具将用一个新的工具替换 malloc 实现,该工具跟踪分配的内存并报告进程终止时未释放的内存。

注意:在大多数系统上,从进程释放的内存在进程退出之前不会返回给系统。不过,它可用于同一进程中的新分配。

关于c++ - 使用基类指针删除派生类时内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com