2013-03-02 26 views
1

我想添加兩個存儲在二維數組中的多項式,第一行存儲係數,第二行存儲程度。重載+運算符以添加2個多項式

我創建了一個重載+函數,但在這裏我使用二維分配的內存數組,並且它在調用該函數時崩潰。

**更新:現在運行,但結果是一些大的負數

僅供參考,我有一個拷貝構造函數和過載=操作

// overload + 
Polynomial Polynomial::operator+(const Polynomial &right) 
{ 

    maxExp = right.maxExp; 
    poly = new int *[maxExp]; 
    for (int i=0; i < maxExp; i++) 
     *(poly + i) = new int[2]; 

    Polynomial temp = *this; 

    for (int i=0; i < maxExp; i++) 
    { 
     for (int j=0; j < 2; j++) 
     { 
      temp.poly[i][j] = poly[i][j] + right.poly[i][j]; 
     } 
    } 
    return temp; 
} 
+0

那是什麼'delete poly []'應該做的?它似乎不合適。 – 2013-03-02 10:53:59

+1

爲什麼不使用'std :: vector'並避免很多內存管理頭痛? – NPE 2013-03-02 10:55:50

+0

@NPE對不起,我還沒有了解Vector,所以我不知道如何使用它 – Casper 2013-03-02 10:59:47

回答

0

有多種問題,但最明顯的一個是,第一行:

delete [] poly; 

破壞加數(在xx + y)之一。它也會泄漏內存,但在這一點上,這是次要的。

編輯:我注意到,你編輯了delete[]出你的問題。這並不能解決問題,但情況更糟糕:您仍然覆蓋加法器,但現在泄漏的內存更多。

+0

是的,這是一個錯誤,它是爲這項任務而設計的。但是如果沒有這一行,程序在調用這個函數時仍然會崩潰 – Casper 2013-03-02 11:11:24

+0

@Herious:你已經刪除了'delete []',但是你仍然覆蓋加數。 – NPE 2013-03-02 11:12:38

+0

謝謝,我明白了你的觀點,我也在'='賦值中刪除了這一行,程序現在運行,但結果是一些醜陋的負數,它們是什麼? – Casper 2013-03-02 11:17:32

2

剛開始用+ =和複製操作員並使+運算符形式。

+0

對不起,我不明白,你是什麼意思開始+ = – Casper 2013-03-02 10:56:21

+0

[C++重載準則](http://courses.cms.caltech.edu/cs11/material/cpp /donnie/cpp-ops.html) – 2013-03-02 11:02:59