1. ホーム
  2. iphone

mallocです。オブジェクトxxの***エラー:解放されるポインタが割り当てられていない

2022-02-13 03:01:57

最近、ffmpegのデコードで問題のようなトラブルが多発しています。

私のプログラムはこのような構成になっています。

 -(void)recvData { -(void)recvData { -(void)recvData { -(void)recvData <未定義

         NSAutoreleasePool * プール = [ ]である。 NSAutoreleasePool アロック NSAutoreleasePool]を使用します。 イニット ];

         、、、一部省略

         [self decodeVidio]です。

        、、、省略されている部分

[プール <スパン ドレーン ];

}

-( UIImage *)decodeVidio { <未定義

      、、、、

     AVFrame *pFrame = avcodec_alloc_frame <スパン ();

     もし ( NULL == pFrame) { <未定義

戻る ゼロ ;

      }

   省略されている部分

   av_free (pFrame)を使用します。    ここで、pFrame=NULL が追加されます。

     省略されている部分

}

  実はこれ、右の  av_free (pFrame); の行を追加することで、このエラーを解決することができます。解析:pFrameは手動解放キューで要求され、1フレームのデータのデコードが終了した後に解放されます。次のフレームのデータがデコードされると、メモリ空間が再割り当てされ、コンピュータのキャッシュ機構により、システムは元のメモリポインタを再び使用します。そして、そのメモリポインタがワイルドポインタであることが起こります。そのため、タイトルのようなエラーが発生します。

  解決方法

  1. pFrame=NULLを追加。ワイルドポインタは使用しない

  2. pFrameをメンバ変数にする。一度だけ代入する。