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

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

Войти
Регистрация
Восстановить пароль
 
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

перегрузка оператора += - C++

23.09.2012, 01:52. Просмотров 361. Ответов 7
Метки нет (Все метки)

реализую класс собственных строк называеться MyString
вылетает при использовании оператора +=
самое интересное что если дебажишь код по шагам всё проходит успешно
сама реализация оператора:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MyString& MyString::operator +=(MyString &s)
{
    if(!s.empty())
    {
    size+=s.Size();
    char temp[size];
    if(str)
    {
        strcpy(temp,str);
    }
    strcat(temp,s.str);
    //delete[] str;
    str=new char[size];
    strcpy(str,temp);
    return *this;
    }
    else return *this;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:54  [ТС]     перегрузка оператора += #2
архив
Вложения
Тип файла: zip String.zip (275.1 Кб, 5 просмотров)
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
23.09.2012, 01:55     перегрузка оператора += #3
maxon887, нужно выделять память size + 1 для символа-ограничителя '\0'
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:56  [ТС]     перегрузка оператора += #4
так а почему она тогда, через раз работает???
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
23.09.2012, 01:57     перегрузка оператора += #5
maxon887, потому что это UB. Вы выходите за пределы массива. Может случится все что угодно.
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 01:58  [ТС]     перегрузка оператора += #6
да это правильно, дабавил, вылетает всё равно
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
23.09.2012, 02:22     перегрузка оператора += #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MyString& MyString::operator +=(MyString &s)
{
    if ( !s.empty()) {
      size += s.Size();
      
      char *temp = str;
      
      str = new char [ size + 1 ];
      
      std::strcpy( str, temp );
      
      std::strcpy( str + ( size - s.size()), s.str );
 
      delete temp;
   }
   
   return *this;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 02:58     перегрузка оператора +=
Еще ссылки по теме:

Перегрузка оператора C++
C++ Перегрузка оператора
Перегрузка оператора = C++
Перегрузка оператора '=' C++
C++ Перегрузка оператора

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

Или воспользуйтесь поиском по форуму:
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
23.09.2012, 02:58  [ТС]     перегрузка оператора += #8
сорри за поднятую тему))
проблема была в конструкторе по умолчанию))))
C++
1
2
3
4
5
MyString::MyString()
{
    size=0;
    str=0;
}
функции strcpy и strcat работают с (\0) строками
тоесть надо так
C++
1
2
3
4
5
[CPP]MyString::MyString()
{
    size=0;
    str="";
}
[/CPP]
Yandex
Объявления
23.09.2012, 02:58     перегрузка оператора +=
Ответ Создать тему
Опции темы

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