似乎添加了第一个 mapList 节点,然后添加了它之后的节点,但是之后添加的每个节点每次都被放置在第三个位置,即使看起来我的 *next 设置正确(我还是新的at 指针和 C) 当我想访问更多节点时,这导致了我的分段错误。我已经让patronNode添加了工作,这要复杂得多,我似乎无法正确处理这个问题,而那些输出只是对我吐口水=(
这是两个结构..
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;
}
这是我的输出的样子:
使用 KEY = Orson Scott Card 输入添加节点
ENTERING ADDMAPNODE WITH KEY = Frank Herbert - 在 Orson Scott Card 之后添加密钥 - 添加 Frank Herbert
ENTERING ADDMAPNODE WITH KEY = Isaac Asimov - 当前密钥是 Orson Scott Card - 在 Frank Herbert 之后添加一个密钥 - 添加了 Isaac Asimov
ENTERING ADDMAPNODE WITH KEY = Douglas Adams - 当前密钥是 Orson Scott Card - 在 Frank Herbert 之后添加一个密钥 - 添加 Douglas Adams
ENTERING ADDMAPNODE WITH KEY = George Orwell - 当前密钥是 Orson Scott Card - 在 Frank Herbert 之后添加一个密钥 - 添加 George Orwell
ENTERING ADDMAPNODE WITH KEY = Robert A. Heinlein - 当前密钥是 Orson Scott Card - 在 Frank Herbert 之后添加一个密钥 - 添加了 Robert A. Heinlein
ENTERING ADDMAPNODE WITH KEY = Ray Bradbury - 当前密钥是 Orson Scott Card - 在 Frank Herbert 之后添加密钥 - 添加 Ray Bradbury
等....在 Frank Herbert 之后添加了每个键,因为代码认为 Herbert's->next 为 NULL,即使我只是将它设置为 = 到一个新节点... CONFIZZZLED