无法调用其他类C ++的析构函数

时间:2015-04-07 18:38:32

标签: c++ memory-leaks

所以我有这个代码,当我运行它时,当B类试图调用它的析构函数时,我遇到了运行时错误。 A类的析构函数似乎很好。我想知道这段代码有什么问题。谢谢你的帮助。

#include <iostream>

using namespace std;

class A{
    public:
        //Constructor
        A(int N){
            this->N = N;
            array = new int[N];
        }

        //Copy Constructor
        A(const A& A1){
            this->N = A1.N;

            //Create new array with exact size
            this->array = new int[N];

            //Copy element
            for(int i=0; i<N; i++){
                this->array[i]= A1.array[i];
            }
        }

        ~A(){
            delete [] array;
            cout<<"Success"<<endl;
        }

        int N;
        int* array;
};

class B{
    public:
        B(const A& array1){
            array = new A(array1);
        }

        ~B(){
            delete [] array;
        }

        A* array;
};

using namespace std;

int main(){
    A matrix1(10);
    B testing(matrix1);

    return 0;
}

3 个答案:

答案 0 :(得分:7)

B::~B()中,您在delete[]中通过B::array中的new分配B::B(const A&)后致电new

这是非法的:您必须始终将deletenew[]delete[]与{{1}}配对。

答案 1 :(得分:1)

当你不创建一个元素数组时,你不能使用delete [],你的析构函数必须像:

~B(){
        delete  array;
    }

答案 2 :(得分:0)

删除b中分配的内存时删除[],因为您只分配了一个元素而[]使编译器假定您正在删除数组分配的内存。