1

次のコードでは、基本的に、ObjectiveC で C 関数 (funca および funcb) を呼び出し、C ポインター pX を使用しています。何らかの理由で、funcb の呼び出し時に EXC_BAD_ACCESS をヒットしました。これは、解放された pX またはその他のメモリの問題に関連している可能性があると考えました。問題は、ここで何がうまくいかないのかということです。その pX が早期にリリースされたことが本当に原因である場合、どうすれば修正できますか? このシナリオのように、ObjectiveC 内で C を実行する一般的な方法は何ですか?

.h

@interface MyObject : NSObject {
    X *pX;
}

.m

// calling funca and get the value pX properly set
if (funca(&pX) != 0) {
    // error;
}

// use the pX returned from funca
funcb(pX, ...);
4

1 に答える 1

4

「Objective C で」C を使用することと、他の場所で C を使用することに違いはありません。バニラ C のポインターは、Objective C の参照カウント システムの外部に存在するため、解放されることはありません。彼らはmalloc()'dとfree()'dです。それが正しく機能していることを確認するかfunca、もう少しコードを投稿してください。

于 2012-07-24T16:03:26.340 に答える