我正在使用g -std=c 11這種緊湊的方法來分配/解除分配二維陣列:
int(*MyArray)[Ydim]=new int[Xdim][Ydim];
delete[] MyArray;
一切似乎都運行良好(編譯時和運行時)。我知道有很多方法可以做到這一點,但這很緊湊,似乎可以完成這項作業。它有什么問題嗎?
一切似乎都正常......但擔心微妙的問題(記憶體泄漏......)
Xdim 和 Ydim 是編譯時常量
uj5u.com熱心網友回復:
假設您想堅持當前的實體化,我認為您不會遇到任何記憶體泄漏問題。如果您的內部嵌套陣列也是一個指標,您需要在取消分配外部陣列之前取消分配。
避免動態分配的替代方法:
避免“新建”和“洗掉”運算子,免去“細微問題”的后顧之憂
我強烈建議換成
std::vector<std::vector<int>> myArray(Xdim,std::vector<int>(Ydim,0));
我什至可能建議你轉向扁平化的矢量
std::vector<int> myArray = {Xdim * Ydim};
更好的是,因為在這種情況下使用 std::array 優先于 vector,所以在編譯時你的大小是已知的。
std::array<std::array<int,Ydim>,Xdim> myArray = {};
或者如果您有能力使用第 3 方庫,特別是您正在處理影像,我發現 OpenCV 矩陣非常成功地表示二維陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533812.html
標籤:C C 11多维数组
上一篇:在遺留C 類中實作移動語意
