【发布时间】:2013-07-24 04:05:08
【问题描述】:
我有一个名为 Matrix 的类,它带有二维指针 bool** 矩阵。
看看这段代码:
void Matrix::operator=(const Matrix& A){
cout << "address in A : " << A.matrix << endl ;
cout << "address in y : " << matrix << endl ;
//return *this;
}
我在我的主函数中这样调用了 = 运算符:
Matrix x(3,5);
Matrix y(3,5);
x.set(1,4,1);
cout << "address out X: " << x.matrix << endl;
cout << "address out Y: " << y.matrix << endl;
y = x;
cout << "address out X: " << x.matrix << endl;
cout << "address out Y: " << y.matrix << endl;
析构函数是这样的:
Matrix::~Matrix(){
cout << "address de : " << matrix <<endl;
for (int i=0;i<m;i++)
delete[] matrix[i];
delete[] matrix;
cout << "address de finish : " << matrix <<endl;
}
当我在 xcode 中运行我的程序时,我得到:
address out X: 0x100103ab0
address out Y: 0x100103af0
address in A : 0x100103ab0
address in y : 0x100103af0
address out X: 0x100103ab0
address out Y: 0x100103af0
address de : 0x100103af0
address de finish : 0x100103af0
address de : 0x100103ab0
address de finish : 0x100103ab0
它看起来不错,但是当我像这样更改 = 运算符函数时:
Matrix Matrix::operator=(const Matrix& A){
cout << "address in A : " << A.matrix << endl ;
cout << "address in y : " << matrix << endl ;
return *this;
}
我得到这个结果:
address out X: 0x100103ab0
address out Y: 0x100103af0
address in A : 0x100103ab0
address in y : 0x100103af0
address de : 0x100103af0
address de finish : 0x100103af0
address out X: 0x100103ab0
address out Y: 0x100103af0
address de : 0x100103af0
Thesis(26190) malloc: *** error for object 0x100103b10: pointer being freed was not allocated
谁能向我解释为什么析构函数在后一个代码中触发得更快?!以及如何预防
提前谢谢你
【问题讨论】:
-
您能否发布您的班级声明以及填充(初始化)您的对象的代码?
-
快速建议:扔掉所有这些,并在
std::vector周围编写一个简单的包装器。写整个东西可能比修复你现在拥有的东西要少。 -
Mark B 的回答是正确的,但是如果您遇到该错误,则说明您还有其他问题,很可能是在您的复制构造函数中,我猜您没有编写。
标签: c++ destructor equals-operator