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

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

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

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

28.04.2013, 21:41. Просмотров 331. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 21:41     Вылетает программа
Посмотрите здесь:

C++ Программа вылетает
программа вылетает. C++
Вылетает программа C++
C++ Вылетает программа
C++ Вылетает программа
Вылетает программа C++
C++ Вылетает программа
Программа С++ вылетает C++
C++ Вылетает программа
C++ Вылетает программа
Вылетает программа C++
Вылетает программа C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12798 / 7258 / 809
Регистрация: 27.09.2012
Сообщений: 17,927
Записей в блоге: 2
Завершенные тесты: 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 содержится мусор
Егор Ярыславски
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 9
29.04.2013, 08:33  [ТС]     Вылетает программа #3
Огромное спасибо!!Помогло!!
Yandex
Объявления
29.04.2013, 08:33     Вылетает программа
Ответ Создать тему
Опции темы

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