Mat::Mat(int R, int C)
{
Ar = new int[C*R];
Co = C;
Ro = R;
}
Mat::~Mat()
{
delete[] Ar;
}
然而我在这个“删除”上得到了“信号SIGABRT”。
修改
我使用XCODE,我也尝试添加硬拷贝构造函数。我仍然在delete []中收到此错误:
Mat::Mat(int R, int C)
{
Ar = new int[C*R];
Co = C;
Ro = R;
}
Mat::Mat(const Mat& M): Co(M.Co), Ro(M.Ro)
{
Ar = new int[M.Co*M.Ro];
for (int i = 0; i<(M.Co*M.Ro); i++) {
Ar[i] = M.Ar[i];
}
}
Mat::~Mat()
{
delete[] Ar;
}
答案 0 :(得分:6)
这更像是通灵调试,但我深信,这是根本原因:
您应该按照 Rule of Three
您应该为类Mat
提供自己的 复制构造函数 和 复制赋值运算符 指针。
如果您没有上述功能的自定义版本,那么每当创建和销毁您的类对象的临时副本时,分配给指针成员Ar
的动态内存就会被释放,最终您会留下悬空指针成员,最后调用delete []
导致未定义行为并导致崩溃。
答案 1 :(得分:1)
如果代码中的任何地方有类似的内容:
{
Mat A(R1,C1);//create A.Ar
MAT B(A);//now B.Ar will point to A.Ar array
}//delete will be called twice for the same array