Непонятные Exceptions

Тема в разделе "LANGS.C", создана пользователем punxer, 23 ноя 2009.

  1. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Код (Text):
    1.         if ((bi.biWidth%2)!=0)
    2.         {
    3.             buff_size-=-bi.biHeight*2;
    4.  
    5.             cout<<"Unalligning..."<<endl;
    6.             tptr=tmp_buff;
    7.             optr=out_buffer;
    8.  
    9.             for (int i=0;i<(-bi.biHeight);i++)
    10.             {              
    11.                 memcpy(tptr,optr,bi.biWidth*bi.biBitCount/8);
    12.                 optr+=(bi.biWidth*bi.biBitCount/8);
    13.                 optr+=2;
    14.                 tptr+=bi.biWidth*bi.biBitCount/8;              
    15.             }              
    16.             free (out_buffer);
    17.             out_buffer=tmp_buff;
    18.             cout<<"Unalligning...OK"<<endl;
    19.         }   */
    После этого кода всё летит к чертям.

    Код (Text):
    1.                BITMAPFILEHEADER bfh;
    2.                BITMAPINFOHEADER bi;
    3.         out_buffer=(byte*)malloc(buff_size);
    4.         tmp_buff=(byte*)malloc(buff_size);
    5.         fread_s(out_buffer,buff_size,sizeof(byte),buff_size,hBmpFile);
    Exceptions разные. Но именно при присутствии этого кода.




    Вот всё:
    Код (Text):
    1.     int n;
    2.     byte* optr;
    3.     byte* tptr;
    4.     int ret;
    5.  
    6.     BITMAPFILEHEADER    bfh;
    7.     BITMAPINFOHEADER    bi;
    8.    
    9.     char                fNameOut[MAX_PATH];
    10.     char                fBmpName[MAX_PATH];
    11.     char*               fBmpNamePtr;
    12.     char                t_dst[MAX_PATH];
    13.     char                fChunkName[MAX_PATH];
    14.    
    15.     int                 ch_size=        NULL;
    16.     DWORD               key=            NULL;
    17.     int                 bmp_count=      NULL;
    18.     FILE*               hOutFile=       NULL;
    19.     FILE*               hBmpFile=       NULL;
    20.     FILE*               hChunkFile=     NULL;
    21.     int                 iter=           NULL;
    22.     int                 t_ret=          NULL;
    23.     int                 bpp=            NULL;
    24.     int                 width_i=        NULL;
    25.     int                 height_i=       NULL;
    26.     int                 buff_size=      NULL;              
    27.     byte*               out_buffer=     NULL;
    28.     int                 all_size=       NULL;
    29.     byte*               chunk_buff=     NULL;
    30.     byte*               tmp_buff=       NULL;
    31.  
    32.     const WORD          sig=            (WORD)0x4D42;
    33.  
    34.     memset(&bfh,0x00,sizeof(bfh));
    35.     memset(&bi,0x00,sizeof(bi));       
    36.    
    37.    
    38.     cout<<"Gambler compiler 1.0"<<endl;
    39.     cout<<"Be attentive, images must be 16 bit, 5-6-5 color format"<<endl;
    40.     cout<<"and some size that original and have a minus height"<<endl;
    41.     cout<<"Please specify images count: ";
    42.     cin>>bmp_count;
    43.     cout<<endl;
    44.    
    45.     if (bmp_count<=NULL)
    46.         return NULL;   
    47.  
    48.    
    49.    
    50.  
    51.     cout<<"Input bitmap filename postfix: ";
    52.     cin>>fBmpName;
    53.     cout<<endl;
    54.    
    55.     cout<<"Input output file name: ";
    56.     cin>>fNameOut;
    57.     cout<<endl;
    58.  
    59.     fopen_s(&hOutFile,fNameOut,"w+b");
    60.     if (!hOutFile)
    61.         return NULL;
    62.    
    63.     iter=0;
    64.    
    65.     while (iter<bmp_count)
    66.     {
    67.         _itoa_s(iter,t_dst,4,TEN_RADIX_SYSTEM);
    68.         fBmpNamePtr=strcat((char *)t_dst,fBmpName);
    69.  
    70.         fopen_s(&hBmpFile,fBmpNamePtr,"rb");
    71.         if (!hBmpFile)
    72.             return NULL;
    73.         fread_s(&bfh,sizeof(bfh),sizeof(bfh),1,hBmpFile);
    74.         if (bfh.bfType!=sig)
    75.             return 0;
    76.         fread_s(&bi,sizeof(bi),sizeof(bi),1,hBmpFile);
    77.         if  ((bi.biBitCount!=need_bpp)&&
    78.             (bi.biPlanes!=1)&&
    79.             (bi.biHeight>=0))
    80.                 return NULL;
    81.         n=0;
    82.         if ((bi.biWidth%2)!=0)
    83.             n=2;
    84.         buff_size=-(bi.biWidth*bi.biHeight*(bi.biBitCount/8))+n*bi.biHeight;
    85.         if (buff_size<=0)
    86.             return NULL;       
    87.  
    88.         fread_s(&red_mask,4,4,1,hBmpFile);
    89.         if (red_mask!=0xF800)
    90.             return 0;
    91.         fread_s(&green_mask,4,4,1,hBmpFile);   
    92.         if (green_mask!=0x07E0)
    93.             return 0;
    94.         fread_s(&blue_mask,4,4,1,hBmpFile);
    95.         if (blue_mask!=0x001F)
    96.             return 0;      
    97.        
    98.         cout<< "Reading ";
    99.         cout<< (buff_size);
    100.         cout<< " bytes of picture... ";
    101.         cout<< (iter);
    102.         cout<< endl;
    103.  
    104.         out_buffer=(byte*)malloc(buff_size);
    105.         tmp_buff=(byte*)malloc(buff_size);
    106.        
    107.         fread_s(out_buffer,buff_size,sizeof(byte),buff_size,hBmpFile);
    108.         cout<<"Read passed: OK!"<<endl;    
    109.         fclose(hBmpFile);
    110.  
    111. /*
    112.         if ((bi.biWidth%2)!=0)
    113.         {
    114.             buff_size-=-bi.biHeight*2;
    115.  
    116.             cout<<"Unalligning..."<<endl;
    117.             tptr=tmp_buff;
    118.             optr=out_buffer;
    119.  
    120.             for (int i=0;i<(-bi.biHeight);i++)
    121.             {              
    122.                 memcpy(tptr,optr,bi.biWidth*bi.biBitCount/8);
    123.                 optr+=(bi.biWidth*bi.biBitCount/8);
    124.                 optr+=2;
    125.                 tptr+=bi.biWidth*bi.biBitCount/8;              
    126.             }              
    127.             free (out_buffer);
    128.             out_buffer=tmp_buff;
    129.             cout<<"Unalligning...OK"<<endl;
    130.         }   */
    131.            
    132.  
    133.        
    134.  
    135.         all_size+=buff_size;
    136.         fwrite(out_buffer,sizeof(BYTE),buff_size,hOutFile);
    137.  
    138.         cout<<"Write passed: OK!"<<endl;
    139.        
    140.         if ((bi.biWidth%2)!=0)
    141.         {
    142.             free(out_buffer);
    143.         }
    144.         else
    145.         {
    146.             free(out_buffer);
    147.             free(tmp_buff);
    148.         }
    149.     iter++;
    150.     }
     
  2. Luke

    Luke New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2009
    Сообщения:
    11
    ИМХО проблема в операндах fread_s()...
     
  3. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Solved.
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Luke
    No, poblem was with type-casts or with something else...