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++ ** 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 почему они равны?
далее, когда я объявляю здесь имя класса (объект)
компилятор должен дать новую память в стеке для объекта, где я ошибаюсь?я не понимаю ....