0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 17
|
||||||
1 | ||||||
В конструкторе копирования отцовского (_str) класса возникает некое "необработанное исключение"25.03.2014, 20:08. Показов 515. Ответов 8
Метки нет Все метки)
(
Добрый день. Делаю курсовик в универе, иерархия классов и работа с ними.
В конструкторе копирования отцовского (_str) класса возникает некое "необработанное исключение" и строка (поле класса, str) почему-то имеет свойство "bad prt", соответсвенно, программа вываливается с ошибкой. В отнаследованных классах все в порядке. Был бы очень признателен, если бы указали на ошибку. Строка 60 - констр. копирования; Строка 391 - его вызов
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
25.03.2014, 20:08 | |
Ответы с готовыми решениями:
8
Возникает ошибка "необработанное исключение типа System.StackOverflowException" "Необработанное исключение в "0x00417c85" в "oui2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000"." Необработанное исключение в "0x00a78659" в "First.exe": 0xC0000005: Нарушение прав доступа при записи "0x0189f000" Необработанное исключение в "0x00412b4a" в "kursovik.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004". |
Модератор
![]() 8657 / 6463 / 871
Регистрация: 14.02.2011
Сообщений: 22,572
|
|||||||||||
25.03.2014, 20:17 | 2 | ||||||||||
в str мусор
соответственно вываливает твою прогу если вызывается конструктор, то объекта еще нет и не зачем проверять что в строке делай так
еще упрощаем
1
|
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 17
|
|
25.03.2014, 20:23 [ТС] | 3 |
ValeryS, Спасибо, сам изначально писал без delete, но препод начинала заливать про то, вдруг там уже что-то есть...
Но это ведь, кажется, неверно, ведь, я же правильно понимаю, что конструктор копирования служит для иницилизации нового экземпляра уже имеющимся, ведь нельзя в уже инициализированный им что-то скопировать? Ведь и в отнаследованных тоже delete удалять, да? этого не нужно, т.к. мне нужно иметь поле len в экз. класса ![]()
0
|
15801 / 8593 / 2103
Регистрация: 30.01.2014
Сообщений: 14,760
|
|
25.03.2014, 20:23 | 4 |
Конструктор копирования нужен с константной ссылкой.
1
|
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 17
|
|
25.03.2014, 20:24 [ТС] | 5 |
0
|
15801 / 8593 / 2103
Регистрация: 30.01.2014
Сообщений: 14,760
|
|
25.03.2014, 20:26 | 6 |
Этот конструктор неверно реализован.
Добавлено через 35 секунд ага
1
|
Модератор
![]() 8657 / 6463 / 871
Регистрация: 14.02.2011
Сообщений: 22,572
|
|||||||||||
25.03.2014, 20:32 | 7 | ||||||||||
ну два варианта
или он сам ничего не знает или хотел тебя проверить этак при каждом выделении придется писать
Добавлено через 2 минуты пардон накосячил ![]()
1
|
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 17
|
|
25.03.2014, 20:32 [ТС] | 8 |
у меня тогда copy_str в теле констр. копирования подчеркнут красным и написано:
0
|
15801 / 8593 / 2103
Регистрация: 30.01.2014
Сообщений: 14,760
|
||||||||||||||||
25.03.2014, 20:39 | 9 | |||||||||||||||
Сначала поясню почему вот это неправильно:
Во-вторых в случае, когда у тебя создалась пустая строка и больше в нее ничего не записывалось данный код приводит к неопределенному поведению при вызове деструктора. Т.к. delete [] предполагает, что удаляется массив, однако у тебя выделялся только один символ. Поэтому лучше так:
Потому что остальной код тоже надо в порядок приводить. Например функции get_len и get_str должны быть const:
1
|
25.03.2014, 20:39 | |
Помогаю со студенческими работами здесь
9
Необработанное исключение в "0x775e15de" в "laba3.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdf9". Необработанное исключение в "0x01082855" в "sort.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc" Необработанное исключение в "0x77df15de" в "kursova.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcdcdd5" Необработанное исключение в "0x778e15de" в "dir-3.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000" Необработанное исключение в "0x013f2b22" в "123.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd" Необработанное исключение в "0x00414558" в "467.exe": 0xC0000005: Нарушение прав доступа при чтении "0xabababbb" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |