我想要能够根据从文件中读取的宽度和高度创建一个二维数组,但是当我使用以下代码时出现错误:
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[]
来删除。 - sje397尝试这种方式:
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
。 - sje397C
式的做法。此外,fprintf
调用在这里真的没有什么用处。它需要进行一些清理。 - Jon如果数组是矩形的,就像你的例子一样,你只需要进行一次分配即可:
int* array = new int[width * height];
这将数组有效地转换为单维数组,且速度更快。
当然,既然是 C++,为什么不使用 std::vector<std::vector<int> >
呢?