CGrect変数を持つC++クラスがあり、アクセスしようとするとsegfaultが発生します。(iphone)C++クラス内のCGRectメンバー変数へのアクセス方法は?
class Parent
{
//with some virtual functions/dtors
};
class Child
{
public:
void SetRect(CGRect rect) { mRect = rect; }
CGRect GetRect() { return mRect; }
int GetIndex() { return mIndex; }
private:
CGRect mRect;
int mIndex;
};
私は、オブジェクトCコードから
CGRect rect = childPtr->GetRect();
をやっているし、それがセグメンテーションフォールト。
私は呼び出し直前に* childPtrを出力し、rectは意図したデータ値で正常に見えます。
int index = childPtr->GetIndex();
同じオブジェクトcコード(*。mm)からはうまく動作しますが、
なぜ私はsegfaultsを取得していますか?これは、仮想関数とは何かを持っている
から
は
- 編集ありがとうございます。
(GDB)のp singlePuzzlePiece-> GetRect()
プログラムは、信号EXC_BAD_ACCESSを受け、メモリにアクセスできませんでした。 理由:アドレス:0x00000001のKERN_PROTECTION_FAILURE 0x00000001? () アドレス0x1のメモリにアクセスできない デバッグ中のプログラムは、GDBから呼び出された関数中に通知されました。 GDBは、信号が受信されたフレームに残ります。 この動作を変更するには、「set unwindonsignal on」を使用してください。 (0x1の)関数を含む式の評価は中止されます。 (gdb)
何とか関数が正しくコンパイルされていませんか? RECT変数に取得するための客観Cで
あなたが私たちに与えたコードを見ると、うまくいくようです。子供は親から派生すべきか? GetRect()はParentの仮想関数ですか?もしそうなら、その実装は何ですか?childPtrはChild *またはParent *ですか?もっと文脈が必要だと思う。 – Ferruccio
child1、child2、およびyesがParentから派生する必要があります。 GetRect()はParentの純粋仮想です。 childPtrはParent *の型です。 CGRectは私の知る限りでは構造体になっています。 – eugene
私はstatic_cast ing ptrをChild *に呼び出す前に呼び出しました。 – eugene