首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二级指针和二维数组

2012-09-12 
二级指针和二维数组高手请进int get_mem2D(byte **array2D, int rows, int columns){int i/* 高手帮我看

二级指针和二维数组高手请进
int get_mem2D(byte **array2D, int rows, int columns)
{
  int i;
  /* 高手帮我看看下面这两个malloc是什么意思啊都*/
  if((*array2D = (byte**)malloc(rows*sizeof(byte*))) == NULL) //这里为什么是*array2D(有个*),为什么是两个* (byte**),sizeof(byte*)这又是什么意思 exit(2);

  /*下面这句对应的三个部分又都是什么意思*/
  if(((*array2D)[0] = (byte* )malloc(columns*rows*sizeof(byte ))) == NULL)
  exit(2);
   
  /*这个循环有必要吗*/
  for(i=1;i<rows;i++)
  (*array2D)[i] = (*array2D)[i-1] + columns ;
   
  return rows*columns;
}

void free_mem2D(byte **array2D)
{
  if (array2D)
  {
  if (array2D[0])
  free (array2D[0]);
  else exit(6);
   
  free (array2D);
  } else{
  exit(6);
  }
}


[解决办法]
你的代码错了不少。帮你改了下

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<rows;i++)  {    array2D[i] = p;    p += columns; //p指向下一行位置。  }  return rows*columns;}// 也应该传引用,并把指针指向NULL。传值的话,就在外面指向NULLvoid 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;} 

热点排行