【发布时间】:2015-04-29 12:59:22
【问题描述】:
我希望能够创建一个二维数组,其大小与我从文件中读取的宽度和高度相同,但是当我说:
int array[0][0]
array = new int[width][height]
【问题讨论】:
我希望能够创建一个二维数组,其大小与我从文件中读取的宽度和高度相同,但是当我说:
int array[0][0]
array = new int[width][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
希望对您有所帮助。
【讨论】:
delete[]删除。
如果数组是矩形的,就像你的例子一样,你可以只分配一次:
int* array = new int[width * height];
这有效地将数组扁平化为一维,而且速度更快。
当然,这是C++,为什么不用std::vector<std::vector<int> >?
【讨论】:
试试这个方法:
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];
}
【讨论】:
malloc。
C-ish 做事方式。另外,fprintf 电话在这里确实没有位置。它可以使用一些清理。