Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Neoni
0 / 0 / 1
Регистрация: 17.05.2012
Сообщений: 25
Завершенные тесты: 1
23.05.2013, 23:09     Ошибка при создании 2-го элемента динамического списка #1
НЕ могу понять откуда как исправить данную ошибка . Выскакивает как мне кажется при попытке динамически выделить память для указателя на структуру повторно 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)));
    
  
}
*/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 23:09     Ошибка при создании 2-го элемента динамического списка
Посмотрите здесь:

C++ Ошибка при создании динамического массива.
Ругается new при создании динамического массива через перегруженный конструктор C++
String subscript out of range при создании динамического массива C++
При удалении первого элемента из динамического списка присваивается плохой указатель C++
Ошибка при сравнении элемента динамического массива с числом C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
23.05.2013, 23:13     Ошибка при создании 2-го элемента динамического списка #2
Выскакивает как мне кажется ...
Чтобы не казалось, в IDE добавляют средства отладки и их лучше освоить.
Где и что и при каких обстоятельствах падает с ними в большинстве случаев (по крайней мере в программках такой сложности) - все это находится достаточно быстро.

По теме ничего сказать не могу
Neoni
0 / 0 / 1
Регистрация: 17.05.2012
Сообщений: 25
Завершенные тесты: 1
23.05.2013, 23:33  [ТС]     Ошибка при создании 2-го элемента динамического списка #3
Ну теперь уже не кажется при отладке в DEV дохожу до 56 строки повторно и на 57 вылетает
ошибка.
Но вроде в коде все правильно даже не знаю что я не учёл
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.05.2013, 00:01     Ошибка при создании 2-го элемента динамического списка #4
строка 69. скорее всего исправить на
*pend = *pbeg; //список заканчивается едва начавшись
Neoni
0 / 0 / 1
Регистрация: 17.05.2012
Сообщений: 25
Завершенные тесты: 1
24.05.2013, 00:12  [ТС]     Ошибка при создании 2-го элемента динамического списка #5
Цитата Сообщение от DU Посмотреть сообщение
строка 69. скорее всего исправить на
*pend = *pbeg; //список заканчивается едва начавшись
А я то думал указатели хорошо знаю,программа заработала как только исправил
Буду внимателен в следующий раз.
Yandex
Объявления
24.05.2013, 00:12     Ошибка при создании 2-го элемента динамического списка
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru