メモリのオーバーフロー

次の様なコードで,実行時にエラー.
  i_DIB DIB_FlipVertical (const i_DIB& dib_)
  {
     i_DIB dib = dib_ ;
     if (dib_.GetWidth () == 0) { return dib ; }
     if (dib_.GetHeight() == 0) { return dib ; }
     u_32* bits = (u_32*)dib.GetP_Bits() ;
     for ( int y=0 ; y<dib.GetHeight()/2 ; y++) {
       for (int x=0 ; x<dib.GetWidth() ; x++) {
         u_32 sPos = x+dib.GetWidth()*( y) ;
         u_32 dPos = x+dib.GetWidth()*(dib.GetHeight()- y) ;
         u_32 tmp = *(bits+(dPos)) ;
         *(bits+(dPos)) = *(bits+(sPos)) ;
         *(bits+(sPos)) = tmp ;
         }
       }
     return dib ;
     }
原因は最初の dPos が画像の範囲を超えていることはすぐにわかったが,
デバッガで追いかけてもこのループは何もなかったかの様に通り,この関数を抜ける時にエラーとなる.
たまたまと言うこともあると思うが,MFC の配列を使用していればアクセスした段階で ASSERT されるのでは?

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください