C++ 在这种情况下,如何释放内存?

C++ 在这种情况下,如何释放内存?,c++,C++,我有以下代码。我的程序有一个基类,即c1c2和c3是它的派生类。我还有一个名为FilmDB(数据库)的类,它将我的所有电影存储在一个数组中,名称为films。在这些if语句中,我将胶片放入这个数组中,这取决于它的类型。(试验条件)。它工作得很好,但是f,cs,d将永远不会空闲,内存泄漏会出现。问题是我不能在if语句中使用delete[],因为我的程序崩溃了,但我不能在外部使用它,因为我看到的f、cs、d在那里不可见。Memtrace显示由于f、cs和d而导致的泄漏 if(test == "a")

我有以下代码。我的程序有一个基类,即c1c2c3是它的派生类。我还有一个名为FilmDB(数据库)的类,它将我的所有电影存储在一个数组中,名称为films。在这些if语句中,我将胶片放入这个数组中,这取决于它的类型。(试验条件)。它工作得很好,但是fcsd将永远不会空闲,内存泄漏会出现。问题是我不能在if语句中使用delete[],因为我的程序崩溃了,但我不能在外部使用它,因为我看到的f、cs、d在那里不可见。Memtrace显示由于fcsd而导致的泄漏

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];
for(int i=0;i
根据评论编辑:


<>我不允许使用<代码> STD::向量在我的任务

< P>我真的不明白为什么人们不使用C++,除非他们使用它的特性。使用vector并自动委派销毁任务

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

对于向量,你可以这样做

vector<classname> v;
v.push_back( class's object);
向量v; v、 推回(类的对象);
您是否在重复使用电影索引[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,它将崩溃。你需要在我目前没有看到的节目部分处理这个问题


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

您应该使用std::vector,避免在C++中使用delete,并提供一个适当的问题。我们可以;我无法从中理解。
Csaladi
Dokumentum
Film
是否有共同的基类?那个类有虚拟析构函数吗?
filmcount
是正确的值吗?Film是基类,Csaladi和Dokumentum是派生类。我试图编辑代码以使其更易于理解。请在调试器中运行代码并查找崩溃。地球上没有任何方法可以提供任何东西,除了摇摆(疯狂的猜测),我们可以提供为什么会发生这种情况的原因,因为你甚至没有任何类似于复制你的问题的东西。我不允许在我的任务中使用向量,这是我忘记提到的东西,对不起。@TamasHargitai编辑你的问题。我们猜不出你想做什么。这需要做的不仅仅是推一个
std::vector
,因为OP有一个多态的派生层次结构,这个解决方案会回归到。我不知道所有这些名称,但在这里是的……一个适当的层次结构的类可以做到这一点@WhozCraig@WhozCraig.:如果可能的话,你可以建议我修改,或者你可以修改,修改或者写一个新的答案…无论如何,它会帮助我回答这个半指定的问题。