C/C++ code// array2D 是一个指针,它指向一个数组,该数组的每个元素为一个指针,他指向每行的起始地址。
int get_mem2D(byte **&array2D, int rows, int columns) // 传引用byte **&array2D。 这才是给你传入指针分配空间。
{
int i;
// 给 行指针 分配空间。这里并不是给二维数组元素分配空间。
if((array2D = (byte**)malloc(rows*sizeof(byte*))) == NULL)
{
return 0;
}
// 这里才是给二维数组分配空间
byte *p;
if((p = (byte*)malloc(columns*rows*sizeof(byte))) == NULL)
{
return 0;
}
/*每个 行指针 指向正确的位置。就是行起始的位置*/
for(i=0;i
{
array2D[i] = p;
p += columns; //p指向下一行位置。
}
return rows*columns;
}
// 也应该传引用,并把指针指向NULL。传值的话,就在外面指向NULL
void free_mem2D(byte **&array2D)
{
if (array2D)
{
//释放二维byte数组空间
if (array2D[0])
free (array2D[0]);
else exit(6);
//释放一维 行指针 数组的空间
free (array2D);
} else{
exit(6);
}
array2D = NULL;
}
int main(int argc, char *argv[])
{
int r,c,x;
byte **p;
get_mem2D(p, 2, 3);
x = 1;
for(r = 0; r < 2; r++)
for(c = 0; c < 3; c++)
{
p[r][c] = x++;
}
for(r = 0; r < 2; r++)
{
for(c = 0; c < 3; c++)
{
printf("%d ", p[r][c]);
}
printf("\n");
}
free_mem2D(p);
return 0;
}