部分代码如下:
int **w;
w=alloc_2d_int(BMP[1],BMP[2]);
bmp_i(p,w,BMP);
int **alloc_2d_int(int m, int n)
{
int **ii, *i;
int j;
ii = (int **) malloc(sizeof(int *) * m);
alloc_error_check(ii);
i = (int *) malloc(sizeof(int) * m * n);
alloc_error_check(i);
ii[0] = i;
for (j = 1; j < m; j++) {
ii[j] = ii[j - 1] + n;
}
return ii;
}
void free_2d_int(int **ii)
{
free(ii[0]);
free(ii);
}
void bmp_i(char FILENAME[], int **w, int BMP[])
{
FILE *fp;
unsigned char ch[3];
int i,j;
// the first bmp file loading
fp=fopen(FILENAME,"rb");
fseek(fp,BMP[0],SEEK_SET);
if(BMP[3] == 8){
for(i=0;i<BMP[1];i++)
for(j=0;j<BMP[2];j++){
fscanf(fp,"%c",&ch[0]);
w[i][j]=ch[0];
}
}else if(BMP[3] == 24){
for(i=0;i<BMP[1];i++)
for(j=0;j<BMP[2];j++){
fscanf(fp,"%c",&ch[0]);
fscanf(fp,"%c",&ch[1]);
fscanf(fp,"%c",&ch[2]);
w[i][j] = (int)( ((int)ch[0]+(int)ch[1]+(int)ch[2])/3.0 );
}
}
fclose(fp);
}
一步一步调试在 bmp_i(char FILENAME[], int **w, int BMP[])中运行时w一直有地址值,但如图处,变为不可读取内存,跪求求帮忙,找了好几天都没有找到问题。