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

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

Войти
Регистрация
Восстановить пароль
 
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
#1

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

28.04.2013, 21:41. Просмотров 358. Ответов 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
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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 21:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вылетает программа (C++):

Программа С++ вылетает - C++
Вылетает.Я новичок в с++ подскажите может надо что то дописать? #include &lt;iostream&gt; // Подключение библиотеки потокового ввода/вывода ...

Вылетает программа - C++
Компилятор ошибок не выдает. В ходе работы программы вылетает окно: Скриншот Вот код: #include &lt;iostream&gt; using namespace std; ...

Вылетает программа - C++
Здравствуйте Написала программу, ошибок и предупреждений во время компиляции не происходит, программа вылетает при определенных условиях,...

Вылетает программа - C++
Почему-то после запуска вылетает программа. Помогите найти ошибку. Написана в 3 файлах. 1: class Array{ public: ...

Вылетает программа - C++
Работаю в dev-c++ программа компилируется нормально, как только запускаю вылетает. Помогите пожайлуста #include &quot;windows.h&quot; ...

Вылетает программа - C++
Выкидывает после того как вводишь название файла где лежит список студентов группы, в котором указаны фамилия, имя, отчество, день, число и...

2
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
29.04.2013, 02:53 #2
C++
1
2
3
4
5
6
7
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];
}
тут лишний
C++
1
delete [] p;
Это конструктор и сейчас в p содержится мусор
1
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
29.04.2013, 08:33  [ТС] #3
Огромное спасибо!!Помогло!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2013, 08:33
Привет! Вот еще темы с ответами:

программа вылетает. - C++
привет всем! я новичок. программа ошибок не выдаёт. После ввода всех переменных программа вылетает я не успеваю увидеть ответ. вот он...

Вылетает программа - C++
Здравствуйте! Сама формулировка задачи: Массив записей содержит информацию о результатах сдачи зимней сессии: фамилия, шифр группы,...

Программа вылетает - C++
Borland C++3.1 консольное приложение При определенных данных программа вылетает. Что это означает? ошибка?какая?

Вылетает программа - C++
Вот что пишет: вот код: /*С клавиатуры вводятся две строки, содержащие некоторые слова, перечисленные через точку с запятой....


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

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

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