我希望能够创建一个二维数组的宽度和高度,我从文件中读取的大小,但我得到的错误,当我说:创建二维数组变量的大小尺寸
int array[0][0]
array = new int[width][height]
我希望能够创建一个二维数组的宽度和高度,我从文件中读取的大小,但我得到的错误,当我说:创建二维数组变量的大小尺寸
int array[0][0]
array = new int[width][height]
尝试这种方式:
int **array; // array is a pointer-to-pointer-to-int
array = malloc(height * sizeof(int *));
if(array == NULL)
{
fprintf(stderr, "out of memory\n");
exit or return
}
for(i = 0; i < height ; i++)
{
array[i] = malloc(width * sizeof(int));
if(array[i] == NULL)
{
fprintf(stderr, "out of memory\n");
exit or return
}
}
array = new int*[width];
if(array == NULL)
{
fprintf(stderr, "out of memory\n");
exit or return
}
else
{
for (int i = 0;i<width;i++)
array[i] = new int[height];
}
您应该使用指针的指针:
int** array;
array = new int*[width];
for (int i = 0;i<width;i++)
array[i] = new int[height];
,当你完成使用它,或者你想调整,你应该释放分配的内存是这样的:
for (int i = 0;i<width;i++)
delete[] array[i];
delete[] array;
要了解并能够读取更复杂的类型,这个环节可能是有用的:
http://www.unixwiz.net/techtips/reading-cdecl.html
希望这是有帮助的。
如果数组是矩形的,在你的榜样,你可以只用一个分配做到这一点:
int* array = new int[width * height];
这有效地拉平阵列成一个单一的维度,它的速度更快。
当然,这是C++,为什么不使用std::vector<std::vector<int> >
?
请参阅http://stackoverflow.com/questions/5279643/declaring-dynamic-2d-vector-in-class – 2011-04-01 01:42:39
[相关FAQ](http://stackoverflow.com/questions/4810664/) – fredoverflow 2011-04-01 06:12:44