如何在C ++中为2D数组分配内存

时间:2016-01-25 02:15:20

标签: c++ arrays image-processing visual-studio-2013

嘿我想为2D数组分配一些内存,稍后在C ++中释放它 我想这样做,因为我的程序中出现错误"表达必须具有恒定的价值。

int x = height;

int y = width;

int pixelArray[x][y];

谢谢。

我正在使用Visual Studio 2013

2 个答案:

答案 0 :(得分:1)

天真的方法是分配一个数组来包含行指针,然后分配每一行,但由于内存局部性,这可能导致数组性能不佳。它也不能像固定大小的2D数组一样使用,它在内存中是连续的。

所以你可以做的是分配一个整数块来保存所有数据,并分配一个指针数组来索引它。

int ** my_array = new int*[ x ];
my_array[0] = new int[ x * y ];
for( int i = 1; i < x; i++ )
{
    my_array[i] = my_array[i-1] + y;
}

要清理,请执行以下操作:

delete [] my_array[0];
delete [] my_array;

您应该考虑将此功能包装到一个简单的类中,因为它保留了多个指针。

答案 1 :(得分:0)

由于x和y是变量,因此必须使用new动态分配数组。您可以按如下方式初始化2D数组:

~/.bashrc

你以下列方式处理它:

int ** pixelArray = new int*[x];
for (int i = 0; i < x; i++) {
  pixelArray[i] = new int[y];
}