我希望能夠創建一個二維數組的寬度和高度,我從文件中讀取的大小,但我得到的錯誤,當我說:創建二維數組變量的大小尺寸
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