所以我有这个代码,当我运行它时,当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;
}
答案 0 :(得分:7)
在B::~B()
中,您在delete[]
中通过B::array
中的new
分配B::B(const A&)
后致电new
。
这是非法的:您必须始终将delete
与new[]
和delete[]
与{{1}}配对。
答案 1 :(得分:1)
当你不创建一个元素数组时,你不能使用delete []
,你的析构函数必须像:
~B(){
delete array;
}
答案 2 :(得分:0)
删除b中分配的内存时删除[]
,因为您只分配了一个元素而[]
使编译器假定您正在删除数组分配的内存。