Задача на создание односвязного списка C++. Ошибка - нарушение доступа для чтения
Программа должна 5 раз спросить фамилию автора и количество книг. После двух раз Visual studio вызывает исключение: "Вызвано исключение: нарушение доступа для чтения. buffer было 0xFFFFFFFFFFFFFFE7." Вот сам код:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <malloc.h>
#include <string.h>
using namespace std;
typedef struct {
char author[20];
int num;
} Form;
struct Lib {
Form data;
struct Lib* next;
};
struct Lib* head;
void addBlock(size_t size) {
struct Lib* add, * buffer;
for (int i = 0; i < size; i++) {
add = (struct Lib*)malloc(sizeof(struct Lib));
if (add) {
cout << "Введите фамилию автора: ";
cin >> add->data.author;
cout << "Введите количество : ";
cin >> add->data.num;
if (head == NULL) {
head = add;
}
else {
buffer = head;
while (buffer->next != NULL) //вот тут пробелема
{
buffer = buffer->next;
}
buffer->next = add;
}
}
}
}
void searchBook() {
char give[20];
cin >> give;
struct Lib* a = head;
while (a != NULL)
if (strcmp(give, a->data.author) == 0)
cout << "Такая книга есть в магазине";
else
{
if (a->next != NULL)
a = a->next;
else
{
cout << "Такой книги нет в магазине ";
a = a->next;
}
}
}
int main() {
setlocale(LC_ALL, "Russian");
addBlock(5);
searchBook();
}
Проблема находится в 30 строке
while (buffer->next != NULL)
Подозреваю, проблемой является утечка памяти, только вот как ее устранить, понятия не имею. Помогите пожалуйста!
Источник: Stack Overflow на русском