2011-12-09 8 views
4

Objective-Cで書かれた既存のCocoaアプリケーションに機能を追加しました。私は書くクラスの既存のC++クラスを使用しなければならないので、新しいクラスはObjective-C++です。さらに、バッファを一時的に使用するC++クラスのメソッドを記述する必要がありました。だから、私はC++の方法は、私は私の.mmファイルにC++クラスをインスタンス化し、続けていくことを試みる新規、削除、Objective-C++、リーク

(void) myMethod{ 
    int8_t* bffr = new int8_t[length]; 
    // use the buffer 
    delete [] bffr; 
} 

のようなものです。問題は、アプリケーションがクラッシュすることです。しかし、私がdeleteをコメントアウトすると、アプリはクラッシュしませんが、Instrumentsはこのメソッドに関連するリークを報告します。 Objective-Cのメモリ管理が強化されていると私は推測しています。このcatch-22を解決するにはどうすればよいですか?

私はmallocとget_temporary_bufferを使用して同じ結果を得ています。

+5

それはあなたの「バッファを使用して」コードに問題があるかなり可能だが、それが何を私たちに示してください。 。 –

+1

+1 @JoshuaWeinbergあなたのバッファがコピーされていないObjectiveCオブジェクトの影響を受けるなら、それは安全に削除できません。 – jv42

答えて

1

あなたが割り当てられたメモリを解放し、適切なタイミングで行う必要があります - だけ時間が経過した後、他のコードは、これまでのメモリのその部分にアクセスしようとしないこと。

+1

Argh。私はそれを 'buffer 'コードを数時間使用して見ました。この返答のおかげで、私は' bffr'を上書きしたことに気付きました。一定。ありがとう。 – garyp

0

あなたがクラッシュの原因を追跡するためにXcodeでメモリデバッグ機能を有効にしようとしたことがありますか?

(編集スキーム>デバッグ>メモリMgmt(仮想ディスクの管理)、すべてのボックスをチェック)

乾杯、 ジェイ