![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Spegulo |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 2.4.2009 Где: Новосибирск Репутация: нет Всего: нет |
Всем привет!
Столкнулся со странной вещью. Есть класс
Программа
При попытке вызова resStr->setString(strcat(leftString, rightString.charBuffer)); вылетает ошибка "нарушение прав доступа". Причем, если делать
Ошибка не вылетает и все отрабатывает предсказуемо. Почему так? ![]() |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Mybe - это константный строковый литерал, а не массив символов. вы не имеет права к нему добавлять символы. |
|||
|
||||
Spegulo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 2.4.2009 Где: Новосибирск Репутация: нет Всего: нет |
Так подобная операция в принципе не реалезуема? Я не специалист в Си, но как из книжек понял, можно и "правые" и "левые" операции перегрузить, плюс в лабах у меня задание именно так и звучит ![]() |
|||
|
||||
Fazil6 |
|
||||||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
все реализуемо, но надо делать правильно. Вопервых перегружать
Тогда твой неправильный код просто не скомпилируется. А неправильно впервую очередь вот здесь
strcat пишет в первый аргумент, но в тот, что у тебя писать нельзя
и еще при наличии конструктора
вполне достаточно перегрузки
а не
operator+ не должен возвращать ссылку |
||||||||||||
|
|||||||||||||
Spegulo |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 2.4.2009 Где: Новосибирск Репутация: нет Всего: нет |
Ну, это требования лабы ![]()
Почему? У меня только так и получилось заставить все это работать. |
||||||||||
|
|||||||||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
Суть такая: если есть два числа a,b то результатом сложения ожидается НОВОЕ число c, а не измененное a или b или ссылка на локальную переменную из operator= (последнее грубейшая ошибка). Кроме того: как вы будете заботится об удалении выделенной память (которую вернули как ссылку фактически)? А также : что насчет a+b+z выражений ? (у вас будет утечка). -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
Spegulo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 2.4.2009 Где: Новосибирск Репутация: нет Всего: нет |
Ясно
![]() Си - не мой профиль. Надеюсь текущий код прокатит, переделывать уже не когда. Спасибо за помощь. |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
попробуй. (странность расстановки const и реализации operator= связаны с неизвестностью реализации конструкторов) а возникающая ошибка не столько с С/С++ связана, сколько с тем, что константы (в т.ч. строковые литералы) хранятся в сегменте памяти только для чтения и процессор отслеживает попытку записи туда. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |