class Array
{
double *mx; int mn;
public:
Array();
~Array(){delete []mx};
Array& operator-(Array& b); //first right way
Array operator -(Array b); //wrong way, but I don't understand why
};
Array::Array()
{
mn=10;
mx=new double[mn];
}
//first, works perfectly
Array& Array::operator -(Array& b)
{
int i=0;
for(i=0;i<mn ;i++)
this->mx[i]-=b.mx[i];
return *this;
}
// here is Error
Array Array::operator -(Array b)
{
int i=0;
for(i=0;i<mn ;i++)
this->mx[i]-=b.mx[i];
}
int main() {
Array x,b;
x=x-b;
}
如果我使用第一個重載,所有的作品都是正確的。C++神祕傳遞類數組
但是,如果使用第二個,所有被編譯良好,但在執行程序時,我收到很多象這樣的錯誤:
"c++ ** glibc detected *** double free or corruption"
我想不通,爲什麼出現這種情況。
據我所知,當我打電話給Array Array::operator-(Array b)
時,對象必須被複制,並且一切都必須良好,但是有錯誤。
好吧,我讀過,我要反對,分配在內存中的相同的地方。但我試着這樣做:
Array Array::operator +(Array b)
{ Array c;
int i=0;
for(i=0;i<mn;i++)
this->mx[i]+=b.mx[i];
cout<<&this->mx<<" "<<&b.mx<<endl;
exit(0);
return c; }
我已經有望獲得在內存地址相同....
答案是0xbfb45188 0xbfb45178爲什麼他們平等的嗎?
furhermore,當我在這裏聲明類的名稱(對象)
編譯器必須提供一個新的內存堆棧的對象 我在哪裏錯了?我不明白....
你的問題是?來源和問題應該是分開的 - 在發佈像這樣的東西之前,先看看其他一些C++問題。 – 2011-05-21 14:21:37
想一下複製構造,通過const ref ...... – Jagannath 2011-05-21 14:24:35