!用C语言定义动态二维数组读取图像有关问题

求助!用C语言定义动态二维数组读取图像问题
char **pointdatabuf; 
pointdatabuf=(char**)malloc( sizeof(char*)*bmpinfoheader.biHeight);    //建立动态二维数组,注意使用完后要及时释放
 for(i=0;i<bmpinfoheader.biHeight;i++)
{
pointdatabuf[i]=(char*)malloc(sizeof(char)*width);
 }
                                                                                          //8为BMP灰度图像信息为:长:bmpinfoheader.biHeight,宽:width
fseek(fp_in,data_start,0);
      fread(pointdatabuf,1,picturedatalength,fp_in); //将图像数据区数据暂存入缓冲区pointdatabuf中
..........................
..........................
下面是将上面读取的文件头信息写入一个新建文件。问题就在写数据区域,也就是将上面读取的存在pointdatabuf图像数据区的数据写入文件。代码如下:
.......................................................
.....................................................          //这里将文件头部分都已写好      
                fseek(fp_out,data_start,0);
fwrite(pointdatabuf,1,picturedatalength,fp_out);         //写数据

如上代码,图像没有读出来,个人觉得是定义动态二维数组时,这一句
pointdatabuf=(char**)malloc( sizeof(char*)*bmpinfoheader.biHeight); 出现了问题。不明白malloc()的参数到底是不是 sizeof(char*)*bmpinfoheader.biHeight。大家帮一下忙,谢谢
------解决思路----------------------
这个会爆掉吧,
而且这个貌似叫 二维指针吧
你为每一行 分配一个内存,你得每行按行 分别读一次啊。

为什么不一次 分配所有行的内存呢