0

我在下面的代碼中得到std_bad_alloc錯誤。看起來問題是當我將矩陣添加到向量中時,程序在調試器中到達該行時崩潰。問題是隻有前兩個矩陣從文件中讀取,另外兩個並不是因爲程序崩潰而出現上述錯誤。錯誤的內存分配C++爲一個向量

+0

嘗試儘可能刪除發佈的代碼,同時保持代碼崩潰的方式完全相同,可能需要幾分鐘,但它會使那些可能會幫助你更快樂的人。很難得到那麼多代碼的任何形式的概述。 – dutt 2010-10-13 01:38:49

+0

當然,我只是消除了很多代碼。我的程序在將第二個矩陣添加到矢量後立即崩潰 – user69514 2010-10-13 01:39:22

+1

我們仍然不知道「矩陣」是什麼。 – GManNickG 2010-10-13 01:46:35

回答

2

你的拷貝構造函數中沒有設置numCols,numRows。

2

不是解決死機問題(已經採取的已經照顧反正),但應注意的是,你的賦值運算符是不必要的浪費作爲當前寫入:

matrix matrix::operator =(const matrix right) 

第一個問題是,它正在通過值取參數。這當然意味着當發生諸如A = B的分配時,則製作B的副本並將其用於該函數的參數right。但在目前的代碼中,副本的唯一目的是設置A的值,然後將其銷燬。你可以通過const matrix&來避免複製。 (或者,您可以將該參數保留爲按值副本,但實現整個運算符爲copy-and-swap。)

第二個問題是,這返回matrix。這也可能導致創建不必要的臨時副本。即使編譯器可能能夠優化拷貝,但根本沒有任何目的將拷貝作爲按值拷貝。賦值運算符的標準形式返回對分配給的對象的引用。所以,你應該繼續前進,並使返回類型爲matrix&

+0

好點,雖然重新返回一個矩陣&:問題遠不止是多餘的副本是不必要的。 (x = y)應該返回對x的引用,以便在x上調用進一步的操作,而不是某些副本...對於變異函數至關重要。例如:(yyyy = yyyymmdd).erase(4); – 2010-10-13 04:54:45