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

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

23.05.2013, 23:09. Показов 562. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2013, 23:09
Ответы с готовыми решениями:

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

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

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

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

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

По теме ничего сказать не могу
0
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
23.05.2013, 23:33  [ТС] 3
Ну теперь уже не кажется при отладке в DEV дохожу до 56 строки повторно и на 57 вылетает
ошибка.
Но вроде в коде все правильно даже не знаю что я не учёл
0
DU
1495 / 1141 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
24.05.2013, 00:01 4
строка 69. скорее всего исправить на
*pend = *pbeg; //список заканчивается едва начавшись
1
6 / 6 / 8
Регистрация: 17.05.2012
Сообщений: 35
24.05.2013, 00:12  [ТС] 5
Цитата Сообщение от DU Посмотреть сообщение
строка 69. скорее всего исправить на
*pend = *pbeg; //список заканчивается едва начавшись
А я то думал указатели хорошо знаю,программа заработала как только исправил
Буду внимателен в следующий раз.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2013, 00:12

Ошибка при создании линейного списка с типом данных в виде пользовательского класса
Добрый день. Помогите понять в чем ошибка при создании списка? int main() { setlocale(LC_ALL,...

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

Выводит ошибку при создании динамического массива стрктур
#include &quot;pch.h&quot; #include &lt;iostream&gt; using namespace std; struct psh { string abc; double l;...

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


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

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

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