在这种情况下我如何释放内存?

时间:2017-05-07 13:15:55

标签: c++

我有以下代码。我的程序有一个基类,即 c1 c2 c3 是其派生类。我还有一个名为 FilmDB (数据库)的类,它将我的所有电影存储在一个数组中,名称为电影。在这些if语句中,我将电影放入这个数组中,具体取决于它的类型。 (测试条件)。它工作正常,但 f cs d 永远不会免费,内存泄漏就会出现。问题是我不能在if语句中使用delete [],因为我的程序崩溃,但我不能在外面使用它,因为f,cs,d在我看来不可见。由于 f cs d ,Memtrace会显示泄漏。

if(test == "a"){
            Class2 *c2 = new Class2(param1,param2,param3,param4);
            films[i] = c2;
        }


        else if(test == "b"){
            Class3 *c3 = new Class3(param1,param2,param3,param4);
            films[i] = c3;
        }


        else {
            Class1 *c1 = new Class1(param1,param2,param3);
            films[i] = c1;
        }

我的FilmDB类有一个虚拟析构函数,它迭代数组并删除它,但它似乎没有解决我的问题。

for(int i = 0; i < n; i++)
       delete films[i];

从评论中编辑:

我不允许在我的任务中使用std::vector

2 个答案:

答案 0 :(得分:1)

我真的不明白为什么人们使用C ++,除非他们使用它的功能。使用vector并自动委托破坏任务。

使用vector并在执行此操作之前阅读文档。

如果是矢量..你可以这样做

vector<classname> v;
v.push_back( class's object);

答案 1 :(得分:0)

你是否正在重复使用电影索引[i]?

在这种情况下,您需要在添加新分配的对象之前删除其中的内存:

if(test == "a"){
            Class2 *c2 = new Class2(param1,param2,param3,param4);
            delete films[i];
            films[i] = c2;
        }


        else if(test == "b"){
            Class3 *c3 = new Class3(param1,param2,param3,param4);
            delete films[i];
            films[i] = c3;
        }


        else {
            Class1 *c1 = new Class1(param1,param2,param3);
            delete films[i];
            films[i] = c1;
        }

为了使其正常工作,您需要films[i]NULL或有效的内存位置。如果films[i]未初始化并且您在其上调用delete,则会崩溃。你需要在我目前没有看到的程序部分处理它。

此外,最好调试并确保调用析构函数。

相关问题