Задача на создание односвязного списка C++. Ошибка - нарушение доступа для чтения

Рейтинг: 0Ответов: 0Опубликовано: 26.01.2023

Программа должна 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) Подозреваю, проблемой является утечка памяти, только вот как ее устранить, понятия не имею. Помогите пожалуйста!

Ответы

Ответов пока нет.