Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Neoni
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
Завершенные тесты: 1
#1

Ошибка при создании 2-го элемента динамического списка - C++

23.05.2013, 23:09. Просмотров 404. Ответов 4
Метки нет (Все метки)

НЕ могу понять откуда как исправить данную ошибка . Выскакивает как мне кажется при попытке динамически выделить память для указателя на структуру повторно Node *pv = new Node . Компилировал на DEV -C++ 4.9.9.2
Выбираю 5 пункт меню 1 раз проходит все нормально.Повторный выбор выскакивает ошибка : Инструкция по адресу
0х0... обратилось к памяти по адресу 0х00000048 Память не может быть written.
Если кто нить подскажет откуда у этой ошибки ноги растут буду очень признателен.
Вот код
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
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
const int m(9);//количество элементов меню
FILE *f;
char bufRL[256];
struct Node {int nom;      //структура динамического списка
             char data[10];
             float cost;
             char nazv_spect[50];
             Node *next;
             Node *prev;
             };
Node *pbeg=NULL;//указатель на начало динамического списка
Node *pend=NULL;//указатель на конец динамического списка
typedef int (*PF)(Node**,Node**);
char* rl(const char*);
int add_s(Node**,Node**);
/*void input_s();
void prosm(Node const* pbeg,Node const* pend);
void record(Node const* pbeg,Node const* pend); */
            
int main(){
 
int kod;
char *menu[m]={"1.создать список","2.просмотр списка",
               "3.вставка элемента в список","4.удаление элемента",
               "5.добавить элемент","6.запись в файл",
               "7.чтение из файла","8.максимальная стоимость",
               "9.Выход"}; 
                      
do{system("cls");
   for(int i=0;i<m;i++)
    {cout<<rl(menu[i])<<endl;}
     cout<<rl("Выберите пункт меню--");
     cin>>kod;
    switch(kod)
          {case 1:/*input_s()*/;break;
           case 2:break;
           case 3:break;
           case 4:break;
           case 5:add_s(&pbeg,&pend);break;
           case 6:break;
           case 7:break;
           case 8:break;
           case 9:return 0;
          }
   }
while(1);
return 0;
}
char* rl(const char *text)
{CharToOem(text,bufRL);return bufRL;} 
//функция добавления элемента структуры
int add_s(Node **pbeg,Node **pend)
{ system("pause");
Node *pv = new Node;//выделение динамической памяти 
if(*pbeg)
       {
        pv->next = 0;pv->prev = *pend;
        (*pend)->next = pv;
        *pend = pv;
       }
    if(!(*pbeg))// если динамический список пуст 
       {
        pv->next = 0;pv->prev = 0;
        *pbeg = pv;
        pend = pbeg; //список заканчивается едва начавшись
       }
    
  cout<<rl("Введите номер билета--");
  cin>>pv->nom;
  if(!(pv->nom)) return 1;
  cout<<rl("Введите дату--");
  cin>>pv->data;
  cout<<rl("Введите стоимость--");
  cin>>pv->cost;
  cout<<rl("Введите название спектакля--");
  cin>>pv->nazv_spect;    
 
 
 
return 0;}
/*
//функция ввода динамического списка
void input_s()
{int k;
     system("cls");
     cout<<rl("окончание ввода номер билета= 0 ")<<endl;
    while(!(k=add_s(&pbeg,&pend)));
    
  
}
*/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 23:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка при создании 2-го элемента динамического списка (C++):

Ошибка при создании динамического массива.
Все доброго времени. Начал создавать одномерный массив, потом решил его...

Ошибка при создании динамического двумерного массива
Ткните пальцем, что не так. Только учусь, делаю лабы, камнями не забрасывайте....

При удалении первого элемента из динамического списка присваивается плохой указатель
Проблема появляется только при удалении первого элемента. // Запись содержит...

Ошибка при сравнении элемента динамического массива с числом
Здравствуйте! При попытке сравнения элемента двухмерного динамического массива...

При удалении элемента из списка происходит непонятная ошибка
Приложила файл, который должен лежать в папке с кодом. При выполнении на...

передача параметров в конструктор при создании динамического массива
Добрый день! Есть довольно тривиальный класс: class Array1d{ int*...

4
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
23.05.2013, 23:13 #2
Выскакивает как мне кажется ...
Чтобы не казалось, в IDE добавляют средства отладки и их лучше освоить.
Где и что и при каких обстоятельствах падает с ними в большинстве случаев (по крайней мере в программках такой сложности) - все это находится достаточно быстро.

По теме ничего сказать не могу
0
Neoni
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
Завершенные тесты: 1
23.05.2013, 23:33  [ТС] #3
Ну теперь уже не кажется при отладке в DEV дохожу до 56 строки повторно и на 57 вылетает
ошибка.
Но вроде в коде все правильно даже не знаю что я не учёл
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
24.05.2013, 00:01 #4
строка 69. скорее всего исправить на
*pend = *pbeg; //список заканчивается едва начавшись
1
Neoni
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
Завершенные тесты: 1
24.05.2013, 00:12  [ТС] #5
Цитата Сообщение от DU Посмотреть сообщение
строка 69. скорее всего исправить на
*pend = *pbeg; //список заканчивается едва начавшись
А я то думал указатели хорошо знаю,программа заработала как только исправил
Буду внимателен в следующий раз.
0
24.05.2013, 00:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 00:12
Привет! Вот еще темы с решениями:

String subscript out of range при создании динамического массива
Всем привет. Пишу игру на c++. Смысл состоит в том чтобы отстреливать группы...

Ругается new при создании динамического массива через перегруженный конструктор
Перегрузил конструктор: class Library { public:...

Ошибка в создании списка
Здравствуйте. Пробую сделать список. Сделал такое заполнение: void NewList()...

Почему при создании динамического массива, отладчик видит только один первый элемент?
Здравствуйте. Объясните почему при создании динамического массива, отладчик (а...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru