2011-04-01 97 views
4

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

int array[0][0] 
array = new int[width][height] 
+0

請參閱http://stackoverflow.com/questions/5279643/declaring-dynamic-2d-vector-in-class – 2011-04-01 01:42:39

+0

[相關FAQ](http://stackoverflow.com/questions/4810664/) – fredoverflow 2011-04-01 06:12:44

回答

1

嘗試這種方式:

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]; 
    } 
+1

您應該避免'C++中的'malloc'。 – sje397 2011-04-01 01:44:11

+1

這是一種真正的「C」式做事方式。另外,'fprintf'調用在這裏確實沒有任何地方。它可以使用一些清理。 – Jon 2011-04-01 01:45:16

13

您應該使用指針的指針:

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

希望這是有幫助的。

+2

...並記得用'delete []'刪除。 – sje397 2011-04-01 01:43:30

+0

TAMER我認爲你需要調換你的高度和寬度。 – jonsca 2011-04-01 01:44:29

+1

@jonsca:根據他寫的,這是正確的方法... – 2011-04-01 01:46:13

1

如果數組是矩形的,在你的榜樣,你可以只用一個分配做到這一點:

int* array = new int[width * height]; 

這有效地拉平陣列成一個單一的維度,它的速度更快。

當然,這是C++,爲什麼不使用std::vector<std::vector<int> >