繁体   English   中英

g++ std=c++11: 以这种方式分配/解除分配二维数组有什么问题吗

[英]g++ std=c++11 : is anything wrong in allocating/deallocating a 2d array this way

我正在使用g++ -std=c++11和这种紧凑的方法来分配/解除分配 2d arrays:

int(*MyArray)[Ydim]=new int[Xdim][Ydim];
delete[] MyArray;

一切似乎都运行良好(编译时和运行时)。 我知道有很多方法可以做到这一点,但这很紧凑,似乎可以完成这项工作。 它有什么问题吗?

一切似乎都正常......但担心微妙的问题(内存泄漏......)

Xdim 和 Ydim 是编译时常量

假设您想坚持当前的实例化,我认为您不会收到任何 memory 泄漏问题。 如果您的内部嵌套数组也是一个指针,您需要在取消分配外部数组之前取消分配。

避免动态分配的替代方法:

避免“新建”和“删除”运算符,免去“细微问题”的后顾之忧

我强烈建议换成

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 = {};

或者,如果您有能力使用第三方库,特别是您正在处理图像,我发现 OpenCV 矩阵表示二维 arrays 非常成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM