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

Вылетает программа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Оптимизация. Что быстрее работает: cout или printf http://www.cyberforum.ru/cpp-beginners/thread851402.html
Что быстрее работает: cout или printf ????????? Добавлено через 32 минуты ЕЩе вот что: Как выводить число типа флоат с 2 знаками после комы оператором принтф???????
C++ Консольная змейка Добрый день. С недавнего времени я пишу в консоли игру с одноименным названием. Занятие, прошу заметить, довольно увлекательное :) Вроде бы все нормально, но грызет меня червячок сомнения, все ли я правильно делаю. Опыта в разработке более-менее объемных проектов у меня, будем честными, крайне мало. Посему я вполне мог наделать где-то кучу каких-то грубых ошибок, о существовании которых я... http://www.cyberforum.ru/cpp-beginners/thread851400.html
Списочные ячейки( изменить код ) C++
Есть программа. Но мне надо переделать её под список (a ( ( ( (b) ) ) ) (c( (d) ) ) ) Помогите, пожалуйста! #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <conio.h> #include <math.h> #include <string.h>
C++ Отображение движения персонажа
Когда на экране показывается какое то действие персонажа, например двигается рука. Чтобы это сделать делается видео или гифка? Как это делается?
C++ Работа с уравнениями http://www.cyberforum.ru/cpp-beginners/thread851365.html
Возник такой вопрос! Вообщем началось с того что решил написать решатель квадратных уравнений,но только с парсером выражения.Вроде задача простая...но возникло пару вопросов :1)Как бы вы разбили строку ax^2+bx+c ? 2)Есть ли готовые библиотеки для раскрытия скобок,приведению подобных слагаемых? 1)Если не брать исключения то ax^2+bx+c....+...+ Легко разбить на части и добавлять в list<string> ,...
C++ Алгоритмы и структуры данных Возможно сейчас прозвучит тупой вопрос, но стоит ли изучать работу современных алгоритмов и структур данных? Почти все структуры и алгоритмы уже реализованы, только бери и пользуйся. Нужно знать как оно внутри реализовано или нет? подробнее

Показать сообщение отдельно
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
28.04.2013, 21:41     Вылетает программа
Доброго времени суток, форумчане!
Можете объяснить, почему вылетает программа, не выдавая ошибки(компилируется нормально)
Задание:абстрактный тип данных(в виде массива) и действия над его элементами
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <iostream.h>
#include <alloc.h>
#include "ATD.h"
//using namespace std;
 
int ATD::have(char a)  //определяет, есть ли элемент в массиве
{
    int n=0;
    p=begin;
    for(int i=0;i<size;i++)if(p[i]==a)n=1;
    return n;
}
int ATD::locate(char a) //определяет позицию в массиве
{
    for(int i=0;i<size;i++)if(p[i]==a)return i;
}
void ATD::include(const char a) /*включает в массив,п.с. наиболее вероятно, что вылетает именно на ней, потому что остальные функции работают нормально*/
{
    if(have(a))cout<<"There is already such element\n";
    else
    {
    /* первый вариант добавления, думал в нем ошибка
    char *m=new char[size];
    int i=0;
    for(i=0;i<size;i++)cout<<p[i];
    for(i=0;i<size;i++)m[i]=p[i];
    delete []p;
    size++;
    p=new char[size];
    for(i=0;i<size-1;i++)p[i]=m[i];
    p[size-1]=a;
    begin=&p[0];
    delete []m;
    */
    p=(char*)realloc((void *)p,(size=size+1)*sizeof(char));
    p[size-1]=a;
    }
}
void ATD::del(char a)//удаляет элемент из массива
{
    int h=ATD::have(a);
    if(!h)cout<<"there is no such element\n";
    else{
    int l=locate(a);
    for(int i=l;i<size-1;i++)
    {
    p[i]=p[i+1];
    }
    char *m=new char[size-1];
    for(i=0;i<size-1;i++)m[i]=p[i];
 
    //for(i=0;i<size-1;i++)cout<<m[i];
    delete []p;
    size=size-1;
    p=new char[size];
    for(i=0;i<size;i++)p[i]=m[i];
    begin=&p[0];
    delete []m;
 
    }
}
 
void ATD::DelRepeat() //удаляет повторяющиеся элементы массива
{
    int n;
    char tmp;
    for(int i=0;i<size-1;i++)
    {
 
    n=0;
       for(int j=i+1;j<size;j++)
    {
        if(p[i]==p[j])n++;
    }
    tmp=p[i];
    for(int k=0;k<n;k++)del(tmp);
    }
 
}
 
ATD::ATD()//коструктор без параметров
{
    begin=NULL;
    p=NULL;
    size=0;
}
ATD::ATD(const ATD &a)//конструктор копирования
{
  delete []p;
  p=new char[a.size];
  begin=a.begin;
  for(int i=0;i<size;i++)p[i]=a.p[i];
}
 
 
 
ATD::ATD(const char *pt)//конструктор копирования(в качестве параметра строка)
{
    delete []p;
    const char *n=pt;
    size=strlen(pt);
    p=new char[size];
    for(int i=0;i<size;i++)p[i]=n[i];
    begin=&p[0];
}
ATD::~ATD()//деструктор
{
    delete[]p;
}
 
void ATD::print()//вывод на экран
{
    DelRepeat();
    for(int i=0;i<size;i++)printf("%c ",p[i]);
    printf("\n");
}
 
void ATD::input()//ручной ввод значений
{
     if(begin!=NULL)
     {
     cout<<"All data will be deleted\n";
     delete []p;
     p=new char[size];
     for(int i=0;i<size;i++)
    {
       cout<<"Input element #"<<i+1<<"\n";
       cin>>p[i];
    }
     }
     else
     {
     cout<<"Input size of array\n";
     do{
     cin>>size;
     if((size<1)||(size>SIZE))cout<<"Bad value!Try again\n";
     }while((size<1)||(size>SIZE));
     p=new char[size];
     for(int i=0;i<size;i++)
    {
       cout<<"Input element #"<<i+1<<"\n";
       cin>>p[i];
    }
     }
}
 
ATD &ATD::operator=(const ATD &a)//оператор присваивания
{
  if(this!=&a)
  {
  delete []p;
  size=a.size;
  p=new char[size];
  begin=a.begin;
  for(int i=0;i<size;i++)p[i]=a.p[i];
  }
  return *this;
}
 
ATD ATD::operator+(ATD &a)//объединение двух множеств
{
  ATD temp(*this);
  temp.DelRepeat();
  a.DelRepeat();
  for(int i=0;i<a.size;i++)temp.include(a.p[i]);
  return temp;
 
}
 
int main()
{
    clrscr();
    ATD a("money borrow"),b("abc"),temp;
    b.include('d');
    b.include('e');
    b.include('f');
 
 
    getch();
    return 1;
}
Вот H-файл
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
#ifndef ATD_H_INCLUDED
#define ATD_H_INCLUDED
#define SIZE 100
class ATD
{
    private:
    char *p;
    int size;
    char *begin;
    public:
    void DelRepeat();
    void include(const char);
    int locate(char);
    void del(char);
    int have(char);
 
    public:
    ATD();
    ATD(const ATD&);
    ATD(const char *);
    ~ATD();
 
    void input();
    void print();
    ATD &operator=(const ATD&);
    ATD operator+(ATD &);
    ATD operator+(const char*);
    int operator==(const ATD &)const;
};
 
 
#endif // ATD_H_INCLUDED
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru