我在下面的代碼中得到std_bad_alloc錯誤。看起來問題是當我將矩陣添加到向量中時,程序在調試器中到達該行時崩潰。問題是隻有前兩個矩陣從文件中讀取,另外兩個並不是因爲程序崩潰而出現上述錯誤。錯誤的內存分配C++爲一個向量
0
A
回答
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
相關問題
- 1. 爲一個向量分配內存
- 2. 向量C++內存分配
- 3. C內存分配錯誤
- 4. 內存分配「錯誤:無法分配大小爲75.1 Mb的向量」
- 5. 爲MPI分配一個C++向量對
- 6. 在C++中爲分配內存錯誤分配異常*
- 7. 當聲明向量時神祕的malloc內存分配錯誤
- 8. 內存分配運行時錯誤C
- 9. 段錯誤,分配內存以指向矢量
- 10. 錯誤由兩個向量分配?
- 11. C++向量分段錯誤
- 12. 內存分配碼錯誤
- 13. CUBLAS內存分配錯誤
- 14. lodePNG內存分配錯誤
- 15. 內存泄漏與分配的結構包含一個向量
- 16. C++矢量分配錯誤
- 17. 與向量的push_back內存分配
- 18. 內存分配中的分段錯誤
- 19. C++分配內存一類
- 20. 常量迭代器的向量構造函數內存分配,seg錯誤
- 21. C++內存分割錯誤?
- 22. 分配內存到一個對象c#
- 23. 分配大量內存會導致錯誤?爲什麼?
- 24. 分配向量,它的內存類型是自己的類C++
- 25. 向量分配和內存使用
- 26. 分段錯誤11,儘管大量的內存分配
- 27. std :: find()爲一個向量的錯誤
- 28. 動態內存分配在C++中的向量
- 29. C++向量的內存分配<bool>
- 30. 分配本地C++向量的內存在哪裏?
嘗試儘可能刪除發佈的代碼,同時保持代碼崩潰的方式完全相同,可能需要幾分鐘,但它會使那些可能會幫助你更快樂的人。很難得到那麼多代碼的任何形式的概述。 – dutt 2010-10-13 01:38:49
當然,我只是消除了很多代碼。我的程序在將第二個矩陣添加到矢量後立即崩潰 – user69514 2010-10-13 01:39:22
我們仍然不知道「矩陣」是什麼。 – GManNickG 2010-10-13 01:46:35