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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
#1

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

16.10.2011, 18:34. Просмотров 263. Ответов 2
Метки нет (Все метки)

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

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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 18:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите справится с ошибочкой (C++):

Не могу справится с последней функцией - C++
Уважаемые форумчане! Прошу не пинать меня если вопрос окажется элементарным или я его не задал не там где надо. Ну в общем у меня такое...

Палиндромчик, но с ошибочкой - Assembler
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; int main(int argc, char* argv) { char...

Не могу справится - Delphi
С клавиатуры вводится предложение. Нужно написать программу, распечатывающую все буквы этого предложения в алфавитном порядке. То есть...

Не могу справится с позиционированием - HTML, CSS
Привет всем, Я новенький в HTML/CSS прошёл курсы на кодеакадеми.цом и решил создать свой сайтик маленький. Так вот проблемка в чём...

не могу справится с вирусом - Удаление вирусов
Привет. Помогите справиться вирусом. проявляется он так: 1. Делает скрытые папки не видимыми. если зайти в настройки, сделать скрытые...

Не получается справится с целью - Prolog
Не получается создать цель в которой нужно вывести спутник который был открытый раньше всех. То есть нужно сразу создать список...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Сыроежка
Заблокирован
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 раз!
0
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
16.10.2011, 19:20  [ТС] #3
Цитата Сообщение от Сыроежка Посмотреть сообщение
Уважайте тех. к которым обращаетесь за помощью! Сообщите, какая ошибька возникает!

А ошибка у вас возникает, потому что вы выходите за пределы выделенной памяти! Вы выделили память для трех элементов, а в методе pop_bc увеличиваете mem до 1000 раз!
А почему тогда для 500 элементов всё нормально работает?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 19:20
Привет! Вот еще темы с ответами:

Не получается справится с задачей - JavaScript
Извините, даже не знаю как описать свою задачу, но буду краток. (знаю что ответ рядом, но пипец я туп) есть два значения или две...

Справится ли Access с задачей - MS Access
Ребят, ответьте срочно(!!!!!), справиться ли Access 2000 с 4.000.000 записями в БД и 10-ю клиентами одновременной интенсивной работы на...

Дайте оценку - справится ли с ...? - Выбор ноутбука
Всем доброго времени суток. Что называется понимающие люди подскажиете. Выбрал ноут Samsung 355V5C (NP355V5C- S04RU) Но не уверен...

Робот-пылесос справится с шерстью? - Пылесосы
У меня дома живет 1 собака породы чау чау и кот длинношерстный. Сами понимаете, что в квартире шерсти куча. Особенно весной и осенью, при...


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

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

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