0

そのため、唯一の要素が配列へのポインターである構造体を作成しました。この配列を初期化すると、セグメンテーション違反が発生します。なぜか教えてくれますか?

コードは次のとおりです。

typedef struct {
    int *data;
} A;

/* Class definition */
class C {
    A* a;
public:
    C(void);
};

/* Constructor */
C::C(void) {
    a->data = new int[10];
}

int main(void) {
    C();
}

ありがとうございました!

4

1 に答える 1

7

クラスは、初期化されていないCへのポインタを保持しているためAです。したがってa->data、その段階で初期化する必要はありません。

余談ですが、あなたの構造体Aは「配列へのポインタ」を保持していませんint。動的に割り当てられた配列を指すように必ずしも初期化する必要はありません。

int n = 42;
A a;
a.data = &n;

また、あなたの の宣言はAC++ ではやや珍しく、 の宣言と矛盾していclass Cます。通常、次の形式が使用されます。

struct A {
  int* data;
};
于 2012-11-17T09:12:35.443 に答える