Кажется, что добавляется первый узел mapList, затем нормально добавляется узел, следующий за ним, но каждый добавленный после него узел каждый раз помещается в эту третью позицию, даже если кажется, что мои * next установлены правильно (I 'Я все еще новичок в указателях и 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;
};
вот что добавляет Func
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 С КЛЮЧОМ = Кард Орсон Скотт
ВВОД ADDMAPNODE СКЛЮЧ = Фрэнк Герберт - Добавление ключа после карты Орсона Скотта - добавил Фрэнк Герберт
ВВОД ADDMAPNODE С КЛЮЧОМ = Исаак Азимов - текущий ключ - Орсон Скотт карты - Добавление ключа после Фрэнка Герберта - добавил Исаак Азимов
ВХОД В ADDMAPNODE С КЛЮЧОМ = Дуглас Адамс - текущим ключом является карта Орсона Скотта - Добавление ключа после Фрэнка Герберта - добавил Дуглас Адамс
ВХОД В ADDMAPNODE С КЛЮЧОМ = Джорджем Оруэллом - текущим ключом является карта Орсона Скотта - Добавлениеключ после Фрэнка Герберта - добавил Джордж Оруэлл
ВХОД В ADDMAPNODE С КЛЮЧОМ = Роберт А. Хайнлайн - текущий ключ - Орсон СкоттКарта - Добавление ключа после Фрэнка Герберта - добавлен Роберт А. Хайнлайн
ВХОД В ADDMAPNODE С КЛЮЧОМ = Рэй Брэдбери - текущий ключ - Орсон Скотт Карта - Добавление ключа после Фрэнка Герберта - добавил Рэй Брэдбери
ect .... каждый ключ добавляется после Фрэнка Герберта, потому что код думает, что следующий Герберта-> равен NULL, хотя я ПРОСТО сделал это = для нового узла ... CONFIZZZLED