4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|||||||||||
1 | |||||||||||
Ошибка в конструкторе класса динамических строк07.03.2017, 00:28. Показов 529. Ответов 15
Метки нет Все метки)
(
Необходимо создать класс динамических строк с конструктором копирования, оператором присваивания, операторами сравнения, операторами ввода-вывода, оператором сложения. При тестировании обнаружил следующие странности:
1) В файле main1.cpp при создании объекта s3 (23 строка) вместо аллокации при вызове оператора "new" происходит переназначение указателя, инкапсулированного в объекте s3, на указатель, из первого элемента вектора. То есть, вместо
3) В файле main3.cpp при добавлении объекта в вектор (30 строка) получаю SIGABRT при вызове оператора "new" в конструкторе копирования. Кто-нибудь может подсказать, в чём может быть проблема? Компилирую GCC (версия - Ubuntu 5.4.1-2ubuntu1~14.04) с ключами -std=c++11 и -Wall.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
07.03.2017, 00:28 | |
Ответы с готовыми решениями:
15
Два динамических массива в конструкторе класса Ошибка при работе с объектом класса в конструкторе другого класса Ошибка в конструкторе класса Ошибка в объявлении класса (в конструкторе) |
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|
07.03.2017, 00:53 [ТС] | 3 |
14 вместе с нуль-символом
0
|
3426 / 2805 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
||||||
07.03.2017, 00:59 | 4 | |||||
15, вместе с '\0'. Вот так будет 14, вместе с '\0':
Не нужно специально добавлять '\0' к строковому литералу, он и так там есть.
1
|
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|
07.03.2017, 01:03 [ТС] | 5 |
А разве strcpy не останавливается на '\0'? Как он тогда узнает, когда ему останавливаться?
0
|
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|
07.03.2017, 01:11 [ТС] | 7 |
Спасибо, исправил. К сожалению, проблему это не решило.
0
|
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|
07.03.2017, 01:24 [ТС] | 9 |
Я это для наглядности здесь сделал: вместо того, чтобы объяснять, какой код для получения какой ошибки нужно закомментировать, а какой - наоборот - просто по main на ситуацию. Я их, само собой, вместе не компилирую.
0
|
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|
07.03.2017, 01:32 [ТС] | 11 |
Я когда заметил, что первый элемент в векторе изменяется, сразу подумал, что где-то с указателями напортачил (одна из самых частых ошибок плюсов, как ни крути). Правда, всё оказалось куда хитрее.
0
|
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|
07.03.2017, 02:03 [ТС] | 13 |
А отладчика нет под рукой? По крайней мере сортировка у меня работает.
0
|
3426 / 2805 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
||||||
07.03.2017, 02:06 | 14 | |||||
Нашёл ещё одну ошибку, из-за которой у меня сортировка не проходила: в операторе присваивания новую память не выделяешь:
1
|
4 / 3 / 0
Регистрация: 22.08.2014
Сообщений: 80
|
|
07.03.2017, 02:21 [ТС] | 15 |
Хм. У тебя не msvc, случаем? У меня с GCC почему-то всё работало и до этого. Но в любом случае, спасибо, что подсказал.
0
|
3426 / 2805 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
|
|
07.03.2017, 02:35 | 16 |
Работало, но криво, иначе бы и темы не было. Есть известное утверждение: если код работает, это вовсе не значит, что в нём отсутствуют ошибки.
0
|
07.03.2017, 02:35 | |
Помогаю со студенческими работами здесь
16
Ошибка в конструкторе копирования класса Ошибка при открытии класса в конструкторе
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |