堆被损坏?
本帖最后由 u011496161 于 2013-11-02 01:48:01 编辑 下面这一小段程序取自我读取一个BMP文件的代码。让他加载8位的文件,却总是异常终止。并且,VS提示:堆被损坏。
#ifdef _DEBUG_
printf("BITMAPINFOHEADER has been successfully loaded.\n");
#endif // _DEBUG_
size_t v;
v=nDIBInfo->nColoursInPalette;
if(nDIBInfo->bitsPerPixel<=8){
if((oColourTable=malloc(v==0?1<<nDIBInfo->bitsPerPixel:v))\
==NULL)
return NULL;
fseek(ifBmpfile,54l,SEEK_SET);
fread(oColourTable,(v==0?1<<nDIBInfo->bitsPerPixel:v),4u,ifBmpfile); //
#ifdef _DEBUG_
printf("The colour table has been successfully loaded.\n");
{
size_t t1;
size_t t2;
size_t v1;
unsigned char *p;
p=oColourTable;
v1=(v==0?1<<nDIBInfo->bitsPerPixel:v);
printf("Data in colour table, %u in total:\n",v1);
/*程序可能在这里终止*/
for(t1=0;t1<v;t1++){
printf("R:%d\t",p[0]);
printf("G:%d\t",p[1]);
printf("B:%d\t",p[2]);
printf("Res:%d\n",p[3]);
p+=4;
}
}
#endif // _DEBUG_
}
/*dWidth在这段程序里面没用……*/
dWidth=(((uwint32_t)nDIBInfo->bitmapWidth)*nDIBInfo->bitsPerPixel)/8;
/*程序也可能在这终止*/
if((oPixelArray=(char *)malloc(nDIBInfo->imageSize))==NULL)/*还可以在这里终止*/
return NULL;