Sasha760
1 / 1 / 0
Регистрация: 03.05.2013
Сообщений: 27
|
||||||
#1 | ||||||
Ошибка деструктора - C++05.05.2013, 21:14. Просмотров 457. Ответов 10
Метки нет Все метки)
(
Имеется шаблон класса- динамического массива. После создания функции push_back начал ругаться конструктор. Объясните пожалуйста в чем дело?
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
05.05.2013, 21:14 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка деструктора (C++):
10
Ошибка работы деструктора - C++ Ошибка при вызове деструктора - C++ Ошибка при вызове деструктора - C++ Ошибка при работе деструктора - C++ Ошибка при вызове деструктора - C++ Ошибка при вызове деструктора - C++ |
bgm123
40 / 40 / 16
Регистрация: 29.01.2013
Сообщений: 277
|
||||||
05.05.2013, 21:31 | #2 | |||||
В этой функции ошибка. В своем варианте вы освобождаете больше, чем надо.
1
|
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
|
|
05.05.2013, 21:31 | #3 |
Sasha760,
![]()
0
|
bgm123
40 / 40 / 16
Регистрация: 29.01.2013
Сообщений: 277
|
|
05.05.2013, 21:32 | #4 |
0
|
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
|
|
05.05.2013, 21:36 | #5 |
bgm123, где Вы это видите?
![]() Добавлено через 1 минуту Вместо присваивания поэлементно, быстрее будет использовать memcpy
0
|
bgm123
40 / 40 / 16
Регистрация: 29.01.2013
Сообщений: 277
|
||||||
05.05.2013, 21:36 | #6 | |||||
Вообще лучше написать функцию вот так:
0
|
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
|
|
05.05.2013, 21:38 | #7 |
bgm123, вообще по канонам, функция push_back принимает значение, которое будет добавлено в конец, и спрашивать "что Вы хотите добавить?" как-то не логично
Добавлено через 19 секунд ибо не всегда надо добавлять что-то из консоли
0
|
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 770
|
|||||||||||
05.05.2013, 21:45 | #8 | ||||||||||
Sasha760,
сложно сказать наверняка, надо в компиляторе смотреть, но так сходу нашёл у вас ошибку в листинге, не в конструкторе, а в самом методе push_back() : вместо
исправьте этот пункт и скажите результат
1
|
Sasha760
1 / 1 / 0
Регистрация: 03.05.2013
Сообщений: 27
|
|
05.05.2013, 21:55 [ТС] | #9 |
abit, , да вы совершенно права, Деструктор не выдал ошибки
Добавлено через 3 минуты Но я все равно не понимаю, в чем принципиальное отличие? С каким size будет если T *u=new T[size++]
0
|
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 770
|
|
05.05.2013, 21:57 | #10 |
Sasha760,
в случае new T[size++] сначала произойдёт выделение памяти размером size, а потом инкрементирование, а в new T[++size] - сперва инкрементирование, а потом выделение памяти размером size (увеличенного)
1
|
Sasha760
1 / 1 / 0
Регистрация: 03.05.2013
Сообщений: 27
|
|
05.05.2013, 21:59 [ТС] | #11 |
abit, Да да да, точно, спасибо большое!
0
|
05.05.2013, 21:59 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
05.05.2013, 21:59 |
Привет! Вот еще темы с ответами:
11
Ошибка при вызове деструктора - C++ Ошибка при вызове деструктора - C++ Ошибка сегментации при срабатывании деструктора - C++ Ошибка деструктора - В конструкторе происходит выход за границу массива - C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |