私は内部に別の構造体の配列を持つ構造体を持っており、構造体の初期化に問題があります。私がやろうとしています何構造体の構造体の配列を初期化する方法は?
typedef struct stack * Stack;
typedef struct book * Book;
struct book {
char *title;
int pages;
};
struct stack {
int num_books;
Book array[50]
};
はゼロ冊で、空のスタックを作成することですが、私は、私が試したすべてのセグメンテーションフォールトを取得しておきます。ここで
は私の初期化機能である:
Stack create_stack(void) {
Stack s = malloc(sizeof(struct stack) * 50);
s->num_books = 0;
// s->array[0]->title = Null;
// s->array[0]->pages = 0;
// the above 2 lines give a seg fault: 11
// I also tried:
// s->array = s->array = malloc(sizeof(struct book) * 50);
// Which gives the error that array type 'Book [50]' is not assignable
return s;
}
にはどうすればゼロ冊で、空のスタックを作成することができますか?
スタックを 'sizeof(struct stack)'としてmallocする必要があります。 50冊の "配列"(typedefのためのポインタ)は、 'stack'構造体の一部として提供されます。 – Hypino
ポインタをtypedefしないでください。混乱の原因となるだけです。特に、50冊の本の配列のように見えるのは、実際には50個のポインタの配列です。したがって、それらのポインタを使用する前にそれらのポインタにメモリを割り当てる必要があります。 – user3386109
あなたはすでに似たような質問をしました。あなたは最初の質問で得たアドバイスに従い、先に進む前に欠陥/不具合を修正しなければなりません!そして、あなたのコードの '' struct'に '' struct'の配列はありません! – Olaf