![](/img/trans.png)
[英]VSCode compiles slower C++ even though I'm using the same command line script
[英]signal SIGABRT even though i'm using delete[] in c++
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;
}
这更多是出于心理调试,但我深信,这是根本原因:
您应该遵循三法则 。
您应该为Mat
类提供自己的副本构造函数和副本赋值运算符 ,以制作指针的深层副本。
如果您没有上述函数的自定义版本,则每当创建和销毁类对象的临时副本时,分配给指针成员Ar
动态内存就会被释放,最终您将剩下一个悬空的指针成员,最后delete []
对其进行调用导致未定义行为和崩溃。
如果您的代码中有任何地方,您将会看到以下内容:
{
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.