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

Помогите справится с ошибочкой - C++

Восстановить пароль Регистрация
 
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
16.10.2011, 18:34     Помогите справится с ошибочкой #1
Обычная реализация дека. Само по себе работает. Странно то, что если добавлять и удалять по одному элементу, как я записал, то программа вылетает с ошибкой. Как это исправить?

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
#include <iostream>
using namespace std;
 
class Dek
{
 private:
  int *mem,*head;
  int size,maxsize;
 public:
  Dek() { head=mem=new int [10]; maxsize=10;size=0; }
  Dek(int kol_vo) {maxsize=kol_vo; head=mem=new int[maxsize]; size=0;}
  Dek(const Dek &y);
  ~Dek() { delete mem; head=NULL; size=maxsize=0; }
  int push_fr(int x){if(size<maxsize){*head=x; size++; head++; return 0;}else return -1;}
  int push_bc(int x){if(size<maxsize){ mem--; *mem=x; size++; return 0;}else return -1;}
  void show();
  int pop_fr(int *x){if(size>0){head--; *x=*head; size--; return 0;}else return -1;}
  int pop_bc(int *x){if(size>0){*x=*mem; mem++; size--; return 0;}else return -1;}
};
 
void Dek::show()
{ 
 int *w;
 for (w=mem;w<head;w++) {cout << *w << " "; }
}
 
Dek::Dek(const Dek &y)
{
 maxsize=y.maxsize;
 mem=new int [maxsize];
 for(size=0;size<y.size;size++) mem[size]=y.mem[size];
 head=mem+size;
}
 
int main(void)
{
 Dek ob(3);
 int x;
 for (x=0; x<1000; x++)
  {
   ob.push_fr(x);
   ob.show();
   ob.pop_bc(&x);
  }
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 18:34     Помогите справится с ошибочкой
Посмотрите здесь:

Не могу справится с последней функцией C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
16.10.2011, 18:36     Помогите справится с ошибочкой #2
Цитата Сообщение от AvengerAlive Посмотреть сообщение
Обычная реализация дека. Само по себе работает. Странно то, что если добавлять и удалять по одному элементу, как я записал, то программа вылетает с ошибкой. Как это исправить?

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
#include <iostream>
using namespace std;
 
class Dek
{
 private:
  int *mem,*head;
  int size,maxsize;
 public:
  Dek() { head=mem=new int [10]; maxsize=10;size=0; }
  Dek(int kol_vo) {maxsize=kol_vo; head=mem=new int[maxsize]; size=0;}
  Dek(const Dek &y);
  ~Dek() { delete mem; head=NULL; size=maxsize=0; }
  int push_fr(int x){if(size<maxsize){*head=x; size++; head++; return 0;}else return -1;}
  int push_bc(int x){if(size<maxsize){ mem--; *mem=x; size++; return 0;}else return -1;}
  void show();
  int pop_fr(int *x){if(size>0){head--; *x=*head; size--; return 0;}else return -1;}
  int pop_bc(int *x){if(size>0){*x=*mem; mem++; size--; return 0;}else return -1;}
};
 
void Dek::show()
{ 
 int *w;
 for (w=mem;w<head;w++) {cout << *w << " "; }
}
 
Dek::Dek(const Dek &y)
{
 maxsize=y.maxsize;
 mem=new int [maxsize];
 for(size=0;size<y.size;size++) mem[size]=y.mem[size];
 head=mem+size;
}
 
int main(void)
{
 Dek ob(3);
 int x;
 for (x=0; x<1000; x++)
  {
   ob.push_fr(x);
   ob.show();
   ob.pop_bc(&x);
  }
 return 0;
}
Уважайте тех. к которым обращаетесь за помощью! Сообщите, какая ошибька возникает!

А ошибка у вас возникает, потому что вы выходите за пределы выделенной памяти! Вы выделили память для трех элементов, а в методе pop_bc увеличиваете mem до 1000 раз!
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
16.10.2011, 19:20  [ТС]     Помогите справится с ошибочкой #3
Цитата Сообщение от Сыроежка Посмотреть сообщение
Уважайте тех. к которым обращаетесь за помощью! Сообщите, какая ошибька возникает!

А ошибка у вас возникает, потому что вы выходите за пределы выделенной памяти! Вы выделили память для трех элементов, а в методе pop_bc увеличиваете mem до 1000 раз!
А почему тогда для 500 элементов всё нормально работает?
Yandex
Объявления
16.10.2011, 19:20     Помогите справится с ошибочкой
Ответ Создать тему
Опции темы

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