【发布时间】:2013-03-29 11:01:14
【问题描述】:
为了说明我的问题,我最小化了我的来源:
#include <iostream>
class vec{
public:
float* X;
int DIM;
vec(int dimension)
{
DIM = dimension;
X = new float[dimension];
for (int i=0;i<DIM;i++)
X[i] = (float) rand()/RAND_MAX;
}
~vec(void){
delete [] X;
}
vec operator-( vec const& rhs )
{
vec ans(DIM);
for (int i=0;i<DIM;i++)
ans.X[i] = X[i] - rhs.X[i];
return ans;
}
};
int main(){
vec A(5),B(5),C(5);
C= A-B;
return 0;
}
当我执行这个程序时,我得到一个堆被破坏的错误。我很确定析构函数是我的问题。在C= A-B; 行中,变量ans 将被构造函数销毁并且无法返回。那正确吗?
如果我删除delete [] X; 行,一切正常。但它不会释放内存。
我做了功课,并针对这个问题咨询了最著名的搜索引擎之一,但没有找到任何答案。我该如何解决?
【问题讨论】:
-
ans被破坏不是问题。制作了ans的临时副本,这就是返回的内容(原则上)。
标签: c++ arrays dynamic memory-leaks operator-overloading