最初のmapListノードを追加し、その後にノードを追加するようですが、その後に追加されたすべてのノードは、* nextが正しく設定されているように見えても、毎回その3番目の位置に配置されます(私はまだ新しいです)ポインタとC)で、他のノードにアクセスしたいときにセグメンテーションエラーが発生します。私はpatronNodeの追加作業を持っていますが、これははるかに複雑で、これを正しく行うことができないようで、出力するものは私に冒涜を吐きます=(
これが2つの構造です。
struct bookMap
{
int totalBooks;
char key[AUTHOR_NAME_LEN];
struct bookMap *next;
struct bookNode *bList,*newBNode;
};
struct Library{
int totalPatrons, totalBooks;
struct patronNode *pList,*newPNode;
struct bookMap *mapList,*newMapNode;
};
これが追加機能です
int addMapNode(struct Book *b, struct Library *lib)
{
struct bookMap *newKey;
printf("\nENTERING ADDMAPNODE WITH KEY = %s\n",b->author);
if(lib->totalBooks == 0)//NO CURRENT BOOKS
{
lib->totalBooks++;
newKey = (struct bookMap *) malloc(sizeof(struct bookMap));
strcpy(newKey->key,b->author); //set the first map node key
addBookToCollection(b,newKey); //add the book to our first map node
lib->mapList = newKey;
return(0);
}else
{
if((isKey(b,&newKey,lib->mapList)) == 0)
{
addBookToCollection(b,newKey);
}else
{
struct bookMap *walker;
walker = lib->mapList;
for(;;)
{
if(walker->next == NULL)
{
printf("Adding a key after %s\n",walker->key);
lib->totalBooks++;
newKey=(struct bookMap *) malloc(sizeof(struct bookMap));
strcpy(newKey->key,b->author);
addBookToCollection(b,newKey);
newKey->next = NULL;
walker->next = newKey;
printf("added %s\n",walker->next->key);
return(0);
}
printf("current key is %s\n",walker->key);
walker = walker->next;
}
私の出力は次のようになります。
キーでADDMAPNODEを入力=OrsonScott Card
キーでADDMAPNODEを入力=フランクハーバート-オーソンスコットカードの後にキーを追加-フランクハーバートを追加
キーでADDMAPNODEを入力=アイザックアシモフ-現在のキーはオーソンスコットカード-フランクハーバートの後にキーを追加-アイザックアシモフを追加
キーを使用してADDMAPNODEを入力=ダグラスアダムズ-現在のキーはオーソンスコットカード-フランクハーバートの後にキーを追加-ダグラスアダムズを追加
キーでADDMAPNODEを入力=ジョージオーウェル-現在のキーはオーソンスコットカード-フランクハーバートの後にキーを追加-ジョージオーウェルを追加
キーを使用してADDMAPNODEを入力=RobertA.Heinlein-現在のキーはOrsonScottCardです-FrankHerbertの後にキーを追加します-RobertA.Heinleinを追加しました
キーを使用してADDMAPNODEを入力=レイブラッドベリ-現在のキーはオーソンスコットカード-フランクハーバートの後にキーを追加-レイブラッドベリを追加
ect ....すべてのキーがFrankHerbertの後に追加されます。これは、コードがHerbertの-> nextがNULLであると見なしているためです。ただし、新しいノードに対して=を作成しただけです... CONFIZZZLED