剛剛在Armadillo圖書館開始。通過文檔和FAQ,我沒有找到關於Armadillo如何處理錯誤的任何參考。例如,我應該如何知道「mat A(1e10,1e10)」是否成功?Armadillo庫如何處理錯誤?
回答
Armadillo的錯誤處理機制並不清楚它的文檔。通過與作者Sanderson的電子郵件溝通,發現Armadillo的錯誤處理機制實際上是C++ std異常和C風格返回值的混合體。但是,在文檔中,拋出什麼異常的信息仍然不完整。例如,要定義一個矩陣,我會建議不要使用「mat X(M,N)」,因爲沒有錯誤處理。安全的方法是這樣的(C風格):
mat X;
try{
X.set_size(M, N);
} catch (...) {
printf("memory allocation failed\n");
return -1;
}
注意,當內存分配錯誤發生時,異常「的std :: logic_error」或「標準:: bad_alloc的」會被拋出(見下面的評論通過mtall),這不是放在文檔中。返回時,使用「X.reset()」釋放數據存儲器。
而@mtall:我建議對特定領域的新手較不苛刻的態度對社區健康更好。強迫他人閱讀不完整的文檔並不是一種建設性的意見。實際上,大多數優秀的開源項目都帶有不太好的文檔,這就是爲什麼我們應該幫助它們更加清晰和用戶友好的原因。
'X.reset()'不需要釋放內存。只要'mat'對象超出範圍,C++就自動調用'mat'析構函數,它會自動釋放內存。 'X.reset()'只有在你想強制釋放內存時纔會使用。在正常使用中,它不是必需的。如果系統不能提供足夠的內存,'mat'會拋出'std :: bad_alloc'。查看'include/armadillo_bits/memory.hpp'中的代碼,其中使用'arma_check_bad_alloc()'函數。如果元素(行數*列)的數量太大而不能存儲在整數中,'mat'將只會拋出一個'std :: logic_error'。 – mtall
如果您覺得某個開源項目涉嫌文檔不完整,歡迎您提交補丁到項目中以改進文檔。這比抱怨和不做功課更有成效。開源項目是在志願者的基礎上創建和維護的。 – mtall
@mtall:感謝您的評論。這些完全從官方文檔中丟失。我建議,也許你可以用Armadillo總結你的經驗,並附上官方文檔 – Jedi
在對Stackoverflow提出問題之前,建議閱讀相關文檔。
從犰狳的documentation實例:
對於R = chol(X)
和chol(R, X)
功能:如果分解失敗,R是復位和chol(X)
拋出一個的std :: runtime_error例外,而chol(R,X)
返回布爾設置爲假。
對於eig_sym(X)
和inv(X)
功能:如果X不是方形,一個的std :: logic_error拋出異常。
對於像+
這樣的運營商,std :: logic_error如果使用不兼容的對象大小,則會引發異常。
對於元素訪問如A(i,j)
,std :: logic_error如果請求的元素超出範圍,則會引發異常。
等等等等
的犰狳的源代碼也可以,這樣你就可以直接看它,看看它做什麼。
- 1. Codeigniter:如何處理數據庫錯誤?
- 2. Armadillo + BLAS + LAPACK:鏈接錯誤?
- 3. 處理數據庫錯誤
- 4. 如何處理'simplexml_load_string'錯誤?
- 5. 如何處理錯誤
- 6. 如何處理「Nonetype」錯誤?
- 7. 如何處理NoReverseMatch錯誤?
- 8. 如何處理CLI錯誤
- 9. ServiceStack:如何處理錯誤?
- 10. 如何處理錯誤
- 11. 如何處理錯誤
- 12. 如何處理錯誤笨
- 13. 如何處理MultiObjectsReturned錯誤
- 14. 如何處理BPEL錯誤
- 15. 如何處理System.OutOfMemoryException錯誤
- 16. 如何處理jsonp錯誤?
- 17. 如何錯誤處理python
- 18. 如何處理錯誤1064?
- 19. 如何處理錯誤(AbstractRestfulController)?
- 20. 如何處理HTTParty錯誤?
- 21. 如何處理404錯誤
- 22. 如何處理NSException錯誤
- 23. 如何處理JS錯誤
- 24. 如何處理IE錯誤
- 25. 如何處理500錯誤
- 26. 如何處理RapidXml錯誤?
- 27. 如何錯誤處理WorksheetFunction.VLookup 1004錯誤?
- 28. 如何在Armadillo中處理「find」的空回報?
- 29. 如何處理使用UnfoldingMaps庫的處理中的這些錯誤消息
- 30. 處理錯誤
某些函數和構造函數拋出'std :: logic_error'作爲文檔狀態 – prajmus