Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
otmenno74
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 11
1

Ошибка при вызове деструктора

19.04.2015, 14:08. Просмотров 296. Ответов 5
Метки нет (Все метки)

По окончании программы выдает ошибку
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
#include <string.h>
#include <iostream>
 
using namespace std;
 
class nik //объявление класса
{
    char *new_string; //массив указателей
    int string_size;
public:
 
    nik(int sting_len) //конструктор, параметр - размер строки
    {
        string_size = sting_len;
        new_string = new char[string_size]; //массив указателей на строки, размером size
        *new_string = NULL;
    }
    ~nik() //деструктор
    {
        delete this->new_string;
    }
 
    // Методы
 
    int operator = (nik); //прототип метода, в котором перегружается =
 
    char* operator + (char); //прототип метода, в котором перегружается +, для добавления символа в конец строки
 
    char* operator +(nik);//прототип метода, в котором перегружается +, для объединения строк
 
    char  operator[] (int); //прототип метода, в котором перегружается [], для получения элем по индексу
 
nik(const nik & obj) //конструктор копирования
{
string_size = obj.Get_size();
new_string = new char[string_size];
Set(obj.new_string);
}
 
    int Get_size() const //метод получения длины строки
    {
        return strlen(new_string);
    }
 
    char *Get_string() //возвращаем символ по индексу
    {
        return new_string; //возвращаем строку
    }
 
    void Set(const char * pch) //метод, принимающий индекс и строку
    {
        if (new_string) delete[] new_string; //удаляем старую строку
        new_string = new char[strlen(pch) + 1]; //заново выделяем память
        strcpy(new_string, pch); //пишем туда переданную строку
    }
 
};
 
 
 
int nik::operator =(nik obj) //перегрузка оператора = (теперь он сравнивает строки)
{
    int x = strcmp(obj.Get_string(), new_string);
    if (x == 0) {
        return 1;
    }
    else return 0;
}
 
char*  nik::operator + (const char symbol) //перегрузка оператора + (теперь он добавляет символ в конец строки)
{
 
    char* box = new char[2];
    box[0] = symbol;
    box[1] = '\0';
    cout << "box" << box << endl;
    strcat(new_string, box);
    return new_string;
}
 
char* nik::operator + (nik obj) //что должен выполнить оператор +
{
    strcat(new_string, obj.Get_string());//сложение строк
    return new_string;
}
 
char nik::operator[] (int index) //возвращаем символ по индексу
{
    return new_string[index]; //возвращаем строку
}
 
int main()
{
    int size;
    char str[1024];
    int index;
    cout << "Compare strings:" << endl << "String #1" << endl;
    cin >> size;
    cin >> str;
    nik string1(size);
    string1.Set(str);
 
    cout << "String #2" << endl;
    cin >> size;
    cin >> str;
    nik string2(size);
    string2.Set(str);
    //Сравнение строк (перегружен оператор =)
    if (string1 = string2) {
        cout << "Srting #1 = #2" << endl;
    }
    else cout << "Srting 1 not = to Srting 2" << endl;
 
 
    //Добавление символа в конец строки (перегружен оператор +)
    cout << "Add to the end of the 1st string:" << endl;
    char c;
    cin >> c;
    string1 + c;
    cout << string1.Get_string() << endl;
 
    //-----------------------------------------------
    //Cложение строк (перегружен оператор +)
    cout << "Coupling of strings:" << endl;
    string1 + string2;
    cout << string1.Get_string() << endl;
    //-----------------------------------------------
    //Получение символа по индексу
    cout << "Symbol of this string by index:" << endl;
    cin >> index;
    cout << string1[index];
    //--------------------------
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2015, 14:08
Ответы с готовыми решениями:

Ошибка при вызове деструктора
Добрый вечер! Почему при вызове деструктора вылетает ошибка после компиляции...

Ошибка при вызове деструктора
Всем привет ! Есть класс class building { private: string...

Ошибка при вызове деструктора
Программа компилиться нормально,но после выполнения system(&quot;pause&quot;); выползает...

Ошибка при вызове деструктора
Не могу дописать лабу... Надо создать 4 класса, описать поля и методы....

Ошибка при вызове деструктора
Подскажите, что не так с этим деструктором? Просто выдает ошибку. Если его...

5
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
19.04.2015, 14:24 2
а у меня вы вылетаете на
C++
1
string1 + string2;
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.04.2015, 14:41 3
Цитата Сообщение от otmenno74 Посмотреть сообщение
C++
1
int nik::operator =(nik obj) //перегрузка оператора = (теперь он сравнивает строки)
для сравнения должен использоваться оператор '=='. Оператор '=' это присваивание, которое тоже должно быть реализовано должным образом.
0
otmenno74
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 11
19.04.2015, 16:50  [ТС] 4
ОПЕРАТОР = ПЕРЕГРУЖЕН
0
Kerry_Jr
Эксперт PHP
2210 / 2006 / 940
Регистрация: 14.05.2014
Сообщений: 5,869
Записей в блоге: 1
Завершенные тесты: 5
19.04.2015, 16:54 5
Цитата Сообщение от otmenno74 Посмотреть сообщение
C++
1
delete this->new_string;
C++
1
delete[] new_string;
0
otmenno74
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 11
19.04.2015, 17:57  [ТС] 6
(this)->a 'this' may only be used inside a nonstatic member function
снова ошибка в конце
0
19.04.2015, 17:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2015, 17:57

При вызове деструктора вылазит ошибка _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Понимаю,что подобный вопрос на форуме поднимался не раз,но разобраться не могу...

При вызове деструктора возникает ошибка Debug Assertion Failed!
вот код программы #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace...

При вызове деструктора выдается ошибка _BLOCK_TYPE_IS_VALID (pHead->nBlockUse)
Вопрос на форуме поднимался раз 100, но все равно не могу понять в чем...


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

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

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