2012-11-17 49 views
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(); 
} 

謝謝!

回答

7

因爲類C包含指向A的指針,該指針尚未初始化。所以在這個階段沒有a->data初始化。

另外,您的struct A不包含「指向數組的指針」,它包含指向int的指針。它不一定要被初始化爲指向一個動態分配的數組:

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

而且,你的A聲明是在C++中有些不尋常,並與的class C不一致。通常使用這種形式:

struct A { 
    int* data; 
}; 
+0

哦,我明白了,謝謝:) –