Я тут задание выполнял и не понимаю в чём дело.... c++

задание: 4. Создать структуру, которая хранит имя человека и его номер телефона. Создать очередь из 5-ти структур и вывести результат. Помним, что в очереди кто первым записался, тот первым и обслуживается. У меня выскакивает ошибка вот такая

#include <iostream>
#include <string>
using namespace std;

struct str
{
    string name;
    int number;
    str* next;
};

int main()
{
    str* first = new str;
    str* tekp = new str;
    str* tek = new str;
    delete tek;
    cout << "Enter name 1 man: ";
    cin >> first->name;
    cout << "Enter number 1 man: ";
    cin >> first->number;
    for (int i = 2; i < 6; i++)
    {
        if (i == 2) {
            str* tek = new str;
            first->next = tek;
            tekp = tek;

        }
        else
        {
            str* tek = new str;
            tek->next = tekp;
            tekp = tek;
        }
        cout << "Enter name " << i << " man: ";
        cin >> tek->name;
        cout << "Enter number " << i << " man: ";
        cin >> tek->number;
        

    }
    str * uq = first;
    while (uq)
    {
        cout << uq->name << " " << uq->number << "\n";
        uq = uq->next;
    }
}

Ответы (1 шт):

Автор решения: Harry

Намекаю большим намеком:

str* tek = new str;
delete tek;

Теперь tek указывает... да в никуда. На освобожденную память.

    if (i == 2) {
        str* tek = new str;

Тут вы работаете с вот этим tek, из предыдущей строки.

        first->next = tek;
        tekp = tek;
    }
    else
    {
        str* tek = new str;

И тут тоже вы работаете с вот этим tek, из предыдущей строки.

        tek->next = tekp;
        tekp = tek;
    }

А с КАКИМ tek вы имеете дело в следующих строках?

    cout << "Enter name " << i << " man: ";
    cin >> tek->name;
    cout << "Enter number " << i << " man: ";
    cin >> tek->number;

Надеюсь, это вас научит внимательнее смотреть на предупреждения компилятора, а заодно именовать свои переменные разнообразнее...

→ Ссылка