Is this a valid way to create a doubly linked-list?
**いいえ、今のままでは、このコードは単にセグメンテーション違反を引き起こします。各ステップの後に次の行を追加すると、その理由は明らかです。
printf("bp = %#x\n\tbp->forp=%#x\n\tbp->backp=%#x\n", bp, bp->forp, bp->backp);
printf("bp1 = %#x\n\tbp1->forp=%#x\n\tbp1->backp=%#x\n", bp1, bp1->forp, bp1->backp);
まず、構造体を割り当てて初期化する必要があります。
bp = malloc(sizeof(struct queue));
bp->forp = NULL;
bp->backp = NULL;
bp1 = malloc(sizeof(struct queue));
bp1->forp = NULL;
bp1->backp = NULL;
次に、次のように表示される値を出力します。
bp = 0x804b008
bp->forp=0 //forward and back pointers are not pointing anywhere, good start
bp->backp=0
bp1 = 0x804b018
bp1->forp=0
bp1->backp=0
これらの行の後:
bp1->forp = bp->forp; //bp1->forp is pointing no where (NULL), neither is bp->forp
// so this does nothing really...
bp1->backp = bp;
bp->forp = bp1;
これで、次のようになります。
bp = 0x804b008
bp->forp=0x804b018
bp->backp=0
bp1 = 0x804b018
bp1->forp=0
bp1->backp=0x804b008
だからあなたの言う通り、それは理にかなっています。さて、次の行で何を試しますか?
bp1->forp->backp = bp1; //2
^
|
+------ That's NULL, and a seg fault.
この前にもう 1 行必要です。
bp1->forp-> = bp;
bp1->forp->backp = bp1;
これで準備完了です。
**最初は空のリストであると仮定します。