我正在努力通過學習C的艱難之路,我難倒了一些東西。我寫我遇到了這個問題的一個簡化版本,使其更容易獲得到它:爲什麼訪問一個mableced結構數組的成員seg錯誤?
#include <stdlib.h>
#define GROUP_SIZE 10
#define DATA_SIZE 64
struct Dummy {
char *name;
};
struct Group {
struct Dummy **dummies;
};
int main() {
struct Group *group1 = malloc(sizeof(struct Group));
group1->dummies = malloc(sizeof(struct Dummy) * GROUP_SIZE);
struct Dummy *dummy1 = group1->dummies[3];
// Why does this seg fault?
dummy1->name = (char *) malloc(DATA_SIZE);
return 0;
}
當我嘗試設置名稱指針在我的假人我得到了賽格故障之一。使用valgrind它告訴我這是未初始化的空間。爲什麼是這樣?
我會說@ dasblinkenlight的建議(使這個連續分配'struct Dummy's而不是雙重間接)可能會更好。 (除非你想做一些雙重間接實際上會有好處的事情) – asveikau 2012-04-05 17:33:41
@asveikau我的回答是基於他在他的'struct'中有一個'Dummy ** dummies'的事實,並且假設有一個原因。 – twain249 2012-04-05 17:35:07
所以你開始假設提問者明白爲什麼最好使用雙重間接,但*不*爲什麼當它被分配好像是連續分配時崩潰...... :-)我的提問者可能是新的,最好引入良好的實踐,而不是向他們展示如何在C中實現Java風格的內存佈局。@ – asveikau 2012-04-05 17:40:27