| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 691 人关注过本帖
标题:有一个内存方面的问题请教大家,请大家帮忙看一下。谢谢
取消只看楼主 加入收藏
mrainborn
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-12-30
收藏
 问题点数:0 回复次数:0 
有一个内存方面的问题请教大家,请大家帮忙看一下。谢谢
这是在DOS下的TC环境中的BMP图片显示的一个函数。
现在有个问题,这个软件是在PC104    的DOS环境下跑的,但是图片在显示10次之后,就会发生软件死机跑飞现象。
怀疑是由内存引起的。请大家看下这样申请和释放内存正确吗?

void DisplayBMP()
{
    long i,j;
    long WBytes;
    int Colors;
    long Height,Width;
    FILE *fpbmp;
    char *Temp=NULL;
    typedef struct tagBITMAPFILEHEADER
    {
        unsigned int bfType;
        unsigned long bfSize;
        unsigned int bfReserved1;
        unsigned int bfReserved2;
        unsigned long bfOffBits;
    }BITMAPFILEHEADER;

    typedef struct tagBITMAPINFOHEADER
    {
        unsigned long biSize;
        long biWidth;
        long biHeight;
        unsigned int biPanes;
        unsigned int biBitCount;
        unsigned long biCompression;
        unsigned long biSizeImage;
        long biXPelsPerMeter;
        long biYPelsPerMeter;
        unsigned long biClrUsed;
        unsigned long biClrImportant;
    }BITMAPINFOHEADER;

    typedef struct tagRGBQUAD
    {
        unsigned char rgbBlue;
        unsigned char rgbGreen;
        unsigned char rgbRed;
        unsigned char rgbReserved;
    }RGBQUAD;

    typedef struct tagBITMAPINFO
    {
        BITMAPINFOHEADER bmiHeader;
        RGBQUAD bmiColors[];
    }BITMAPINFO;

    BITMAPFILEHEADER bfh;
    BITMAPINFOHEADER bih;
    unsigned char SrcData,data;
    if((fpbmp=fopen("Rochen.bmp","rb"))==NULL)
    {
            /*Exit("Can Not Open The File.\n");*/
    }
    fread(&bfh,sizeof(BITMAPFILEHEADER),1,fpbmp);
    if(bfh.bfType!='M'*256+'B')
    {
            /*Exit("This Is Not A Bmp File.\n");*/
    }
    fread(&bih,sizeof(BITMAPINFOHEADER),1,fpbmp);
    Height=bih.biHeight;
    Width=bih.biWidth;
    WBytes=WidthBytes(Width,bih.biBitCount);
    Colors=1<<bih.biBitCount;
    if(!(Colors==16||Colors==2))
    {
            /*Exit("This Programme Only For 16 Colors Bitmap.\n");*/
    }
    /*Temp = calloc(10, sizeof(RGBQUAD));*//*申请颜色内存*/
    Temp = (RGBQUAD *)malloc(Width*sizeof(RGBQUAD));  /*申请内存空间*/
    fread(Temp,sizeof(RGBQUAD),Colors,fpbmp);
    /*printf("%d %d",'\f','\t');*/
    for(i=Height-1;i>=0;i--)
    {
         fseek(fpbmp,54+Colors*sizeof(RGBQUAD)+i*WBytes,SEEK_SET);
         for(j=MOVEX;j<Width+MOVEX;j++)/*图片X轴方向起始坐标*/
         {
           switch(Colors)
           {
               case 16:
                             if(j%2==0)
                             {
                                        fread(&SrcData,1,1,fpbmp);
                                        data=SetPalette(Colors,SrcData/16);
                                        putpixel(j,Height-1-i+MOVEY,data);/*图片Y轴方向起始坐标*/
                             }
                             else
                             {
                                        data=SetPalette(Colors,SrcData%16);
                                        putpixel(j,Height-1-i+MOVEY,data);
                             }
                             break;
               case 2:
                             if(j%8==0)
                             {
                                        fread(&SrcData,1,1,fpbmp);
                                        data=SetPalette(Colors,(SrcData>>7)%2);
                                        putpixel(j,Height-1-i+MOVEY,data);
                             }
                             else
                             {
                                        data=SetPalette(Colors,(SrcData>>(7-j%8))%2);
                                        putpixel(j,Height-1-i+MOVEY,data);
                             }
           }
         }
    }
    /*getch();*/
  free(Temp);/*释放掉颜色内存*/
  close(fpbmp);  /*关闭文件*/
}
搜索更多相关主题的帖子: 内存 
2010-04-01 11:37
快速回复:有一个内存方面的问题请教大家,请大家帮忙看一下。谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025666 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved