2011-04-01 93 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> >