似乎添加了第一个mapList节点,然后添加节点跟随它,但是之后添加的每个节点每次都被置于第三个位置,即使看起来我的* next正确设置(我'我仍然是新的指针和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输入ADDMAPNODE
使用KEY输入ADDMAPNODE = Frank Herbert - 在Orson Scott Card之后添加钥匙 - 弗兰克赫伯特补充道。
使用KEY = Isaac Asimov输入ADDMAPNODE - 目前的关键是Orson Scott Card - 在Frank Herbert之后添加一把钥匙 - 添加了Isaac Asimov
使用KEY = Douglas Adams输入ADDMAPNODE - 目前的关键是Orson Scott Card - 在Frank Herbert之后添加一把钥匙 - 道格拉斯亚当斯补充道。
使用KEY = George Orwell输入ADDMAPNODE - 目前的关键是Orson Scott Card - 在Frank Herbert之后添加一把钥匙 - 添加了George Orwell
使用KEY输入ADDMAPNODE = Robert A. Heinlein - 目前的关键是Orson Scott Card - 在Frank Herbert之后添加一把钥匙 - 添加了Robert A. Heinlein
使用KEY = Ray Bradbury输入ADDMAPNODE - 目前的关键是Orson Scott Card - 在Frank Herbert之后添加一把钥匙 - 添加了Ray Bradbury
等......在Frank Herbert之后添加了每个密钥,因为代码认为Herbert的>接下来是NULL,即使我只是把它变成了一个新的节点...... CONFIZZZLED
答案 0 :(得分:0)
您应该包含struct bookMap
定义,但我相信您的问题是 strcpy
调用:您没有为->key
字段分配任何空间
一个问题是你没有为第一个节点设置->next = NULL
,但是如果这实际上很重要,那么你会意外地到达"current key is "
行,而不是看到的。
每次都是walker->next == NULL
,在第一次之后,但"added "
行执行时却很好。
我会检查isKey
的代码,并确保它没有破坏->next
指针。