【发布时间】:2013-11-27 02:23:04
【问题描述】:
我正在尝试在 C 中分配一个 3D 数组。如您所知,它用于存储图像数据,格式为 Array[height][width][channel];这是我的代码。
BYTE*** allocateImageArray(INT_32 width, INT_32 height, INT_32 channels) {
BYTE*** array;
INT_32 i, j;
array = malloc(height * sizeof(BYTE**));
for(i = 0; i < height; i++) {
array[i] = malloc(width * sizeof(BYTE*));
for(j = 0; j < channels; j++) {
array[i][j] = malloc(channels * sizeof(BYTE));
}
}
printf("Pixel Array Size: %d\n", sizeof(array));
return array;
}
它编译得很好。但是,数组末尾始终为 8(由 sizeof 表示)。当我稍后在代码中尝试访问数组时,程序就会崩溃。
所有答案都在此致谢。
编辑:忘记包含。我已经弄清楚程序崩溃发生的位置。当我尝试将值分配给数组末尾的一个字节时,就会发生这种情况。
【问题讨论】:
-
为什么不
array = malloc(height * width * channel * sizeof(BYTE));? -
这实际上是我的原始代码,但它也有同样的问题。此外,它没有定义有多少行、多少列和(无论第 3 维被称为什么)是吗?
-
这取决于您如何访问元素。以
array[0][0][0]为例。 -
是的,我想使用数组表示法访问它们,即 Array[x][y][z]。
标签: c arrays pointers malloc multidimensional-array