С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
11 / 10 / 7
Регистрация: 07.05.2013
Сообщений: 248

После выполнения программы, работающей с динамической памятью, вылетает ошибка

20.09.2014, 12:52. Показов 1444. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
при компиляции вылетает ошибка (не может обратиться к private gолям next, val) err: C2248

если поля поместить в public, то прога компилится, но вылетает сообщение после вывода очереди:
expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
line 52 dbgdel.cpp
файл linkedlist.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
template <class T> class List
{
private:
    class node //Класс node содержит данные списка
    {
    private:
        int count;
    public:
        T val; //Данные списка
        node *next; //Указатель на следующий элемент в списке
    
        node() : next(NULL){}
        ~node(){}
    };
 
    node *head; //Указатель на начало списка
    int count; //Количество элементов в списке
public:
    List()
    {
        head = 0;
        count = 0;
    }
    ~List()
    {
        clear(); //Функция освобождает память, используемую для хранения списка
    }
    int getCount() const //Возвращает количество элементов в списке
    {
        return count;
    }
 
    int add(T data)//Добавление элемента в конец списка. Возвращает количество элементов в списке
    {
        node *to_add = new node;
        to_add->next = NULL;
        to_add->val = data;
        if (head == NULL) //Если в списке нет элементов
        {
            head = to_add;
        }
        else
        {
            node *current;
            for (current = head; current->next != NULL; current = current->next);
            current->next = to_add;
        }
        count++;
        return count;
    }
 
    int del(int x) //Удаление элемента из списка. Возвращает количество элементов в списке. 
    {              
        if (x>count) return -1;//Возвращает -1, если произошла ошибка
        node *to_del = head;
        if (x == 1) //Если нужно удалить первый элемент
        {
            head = head->next;
            delete to_del;
        }
        else
        {
            node *current = head;
            for (int i = 1; i<x - 1; i++)
                current = current->next;
            to_del = current->next;
            current->next = current->next->next;
            delete to_del;
        }
        count--;
        return count;
    }
 
    void clear() //Очистка списка
    {
        node *current = head;
        node *to_del = head;
        while (to_del != NULL)
        {
            current = current->next;
            delete to_del;
            to_del = current;
        }
        head = NULL;
        count = 0;
    }
 
    T getData(int x) const //Возвращает данные из списка.
    {
        node *current;
        for (current = head; x>1; x--)
            current = current->next;
        return current->val;
    }
    
};
файл lqueue.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using namespace std;
 
const int MaxQSize = 100;
 
template <class T> class LQueue
{
private:
    T first; // первый Э очереди
    T last; //последний Э очереди
    int countQ; // счетчик Э очереди
    T LQueueArr[MaxQSize];//массив очереди
public:
    LQueue()
    {
        countQ = 0;
        first = LQueueArr[0];   // инициализируем нижнюю границу очереди
        last = LQueueArr[countQ];   // инициализируем верхнюю границу очереди
    }
    //добавить э
    void QInsert(List<T> list1, List<T> list2)
    {
        if (countQ == MaxQSize - 1) // если число элементов совпадает с макс размером массива
        {
            cout << "Error: Очередь заполнена." << endl;
        }
        if (list1.getCount() == 0 && list2.getCount()== 0)  //если стеки list1 и list2 пустые, то очереь пустая
        {
            cout << "Error: Очередь пуста." << endl;
        }
        else
        {
            for (int i = 1; i <= list1.getCount(); i++)
            {
                LQueueArr[countQ] = list1.getData(i);
                countQ++;
            }
            for (int i = 1; i <= list2.getCount(); i++)
            {
                LQueueArr[countQ] = list2.getData(i);
                countQ++;
            }
        }
    }
    //удаление Э
    int QRemove()
    {
        if (!QEmpty())
        {
            // считать элемент в вершине стека
            int temp = LQueueArr[countQ - 1];
            // уменьшить top
            --count;
            cout << "Последний удаленный элемент: " << temp << endl;
            return temp;
        }
        return 1;
    }
    //вывод
    void Print()
    {
        if (!QEmpty())
        {
            int i = 0;
            while (i < countQ)
            {
                cout << LQueueArr[i] << " ";
                i++;
            }
            cout << endl;
        }
        else
        {
            cout << "Error: Очередь пустая, добавьте в нее Элементы" << endl;
        }
    }
    int QLength()
    {
        return countQ;
    }
    
    //вернуть начало очереди
    int QFront()
    {
        return LQueueArr[0];
    }
    //очистить очередь
    void ClearQueue()
    {
        while (countQ > 0)
        {
            QRemove();
        }
    }
    //проверка на полноту очереди
    bool QFull()
    {
        int length = QLength();
        if (length == MaxQSize)
        {
            return true;
        }
        else
            return false;
    }
    //проверка на пустоту
    bool QEmpty()
    {
        //int count_of_elem = QLength();
        if (countQ == 0)
        {
            return true;
        }
        return false;
    }
 
};
файл test_34.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// tasks_34.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "linkedlist.h"
#include "lqueue.h"
using namespace std;
 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");/*List<int> my_list; //Пример использования списка с типом int
     Задание 3
    my_list.add(-9);
    for (int i = 0; i < 5; i++)
    {
        my_list.add(i);
    }
    my_list.add(54);
 
    cout << my_list.getCount() << endl;
    for (int i = 1; i <= my_list.getCount(); i++)
    {
        cout << my_list.getData(i) << " ";
    }
    cout << endl;
 
    my_list.del(1);
    my_list.del(3);
    my_list.del(5);
 
    cout << endl;
    cout << my_list.getCount() << endl;
    for (int i = 1; i <= my_list.getCount(); i++)
    {
        cout << my_list.getData(i) << " ";
    }
    cout << endl;
 
    my_list.clear();
 
    struct my_type
    {
        int x;
        double y;
    };*/
 
 
    /*Задание 4*/
    List<int> l1, l2;
    for (int i = 0; i < 5; i++)
    {
        l1.add(i);
    }
    l1.add(54);
    for (int i = 10; i < 15; i++)
    {
        l2.add(i);
    }
    l2.add(540);
    cout << "Список 1: ";
    for (int i = 1; i <= l1.getCount(); i++)
    {
        cout << l1.getData(i) << " ";
    }
    cout << "\nСписок 2: ";
    for (int i = 1; i <= l2.getCount(); i++)
    {
        cout << l2.getData(i) << " ";
    }
    cout << "\nОчередь из списков: ";
    LQueue<int> LQ;
    LQ.QInsert(l1, l2);
    LQ.Print();
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2014, 12:52
Ответы с готовыми решениями:

Ошибка с динамической памятью
Очень прошу помочь исправить ошибку в области дин.памяти. Проблема: 1. Шаг Создаю массив для записи 2. Шаг удаляю элемент под...

После запуска программы, вылетает вот такая ошибка
После запуска программы, вылетает вот такая ошибка Помогите решить проблему, очень вас прошу!!!!!

Во время выполнения программы вылетает ошибка "The variable 'x' is being used without being initialized"
нужно найти &quot;y&quot; со значениями от -9 до 9 в итоге я сделал программу, при обработке выдает формула 8*(1-tgx)^ctgx+cosx(x-y) Run-Time...

5
11 / 10 / 7
Регистрация: 07.05.2013
Сообщений: 248
20.09.2014, 13:14  [ТС]
2 раза можно пропустить, а потом на 3 раз вылетает вот это:
Миниатюры
После выполнения программы, работающей с динамической памятью, вылетает ошибка  
0
11 / 10 / 7
Регистрация: 07.05.2013
Сообщений: 248
21.09.2014, 16:14  [ТС]
Первый этап обработки исключения по адресу 0x541C56E8 (msvcr120d.dll) в tasks_34.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x65657246.
Необработанное исключение по адресу 0x541C56E8 (msvcr120d.dll) в tasks_34.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x65657246.

записываю в очередь элементы из списка 1, вот что выводится в консоль:
Список 1: 0 1 2 3 4 54
Список 2: 10 11 12 13 14 540
Очередь из списков: 0 1 2 3 4 54
//ошибка-нажимаю прервать
нажм любую клавишу
Миниатюры
После выполнения программы, работающей с динамической памятью, вылетает ошибка  
0
И целого heap'а мало
 Аватар для Andrej
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
21.09.2014, 16:25
wolf1396, дебажь код: либо пишешь не в свою память, либо освобождаешь неосвобождаемое.
0
11 / 10 / 7
Регистрация: 07.05.2013
Сообщений: 248
22.09.2014, 09:39  [ТС]
и как посмотреть, где моя память, а где нет?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
23.09.2014, 12:05
Копий дофига, а конструктора копий у списка нет. И оператор присваивания тоже не помешает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2014, 12:05
Помогаю со студенческими работами здесь

Ошибка после выполнения программы
Как исправить? Программа выполняется правильно, но после нажатья Энтера вот это выскакивает (очень сильно раздражает). Причем если нет ...

Ошибка в коде при работе с динамической памятью
Не могу понят что не так ? При вводе в динамический массив А последовательность &quot;61 3 2 0 -2 -25 -61 -70&quot; программа крашится...

После выполнения программы появляется ошибка
Добрый день. Имеется лабораторная с заданием: 1. Ввести одномерные массивы X1n1 , X2n2 иX3n3 . Заменить в каж-дом из них максимальный...

Работа с динамической памятью через указатели. Загадочная ошибка.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

Работа с динамической памятью через указатели. Загадочная ошибка.
Программа запускается и нормально исполняется, но в конце появляется ошибка. Мог бы кто подсказать в чем проблема? Пишу в Microsoft...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru