Форум программистов, компьютерный форум, киберфорум
Наши страницы

Оператор "delete" и ошибка "_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) Error" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Параллельный set_difference http://www.cyberforum.ru/cpp-beginners/thread1232255.html
Как лучше оформить на C++ такую задачу?
C++ Как сделать ровный вывод состояния регистров Всем исключительно доброго времени дня или ночи. Я начинающий, так что прошу сильно меня не пинать. В общем, вот в чём дело: По заданию в книге Дейтел Х. Дейтел П - Как программировать на С++,... http://www.cyberforum.ru/cpp-beginners/thread1232247.html
C++ Удалить (сделать прозрачными) все непрозрачные кубики, видимые хотя бы с одной из четырех сторон
Помогите, пожалуйста, отредактировать эту программу. Нужно переписать код, чтобы использовались функции. Текст задания: Поле размером mxn заполнено прозрачными и непрозрачными кубиками. ...
C++ Формула, по которой можно вычислить время наступления Рагнарека
Рагнарек должен наступить с минуты на минуту. Но Один не знает, когда именно он наступит. Локи, как самый умный, сказал Одину формулу, по которой можно вычислить время наступления Рагнарека. К...
C++ При выводе минимального элемента последовательности программа выводит слишком большое число http://www.cyberforum.ru/cpp-beginners/thread1232190.html
При выводе минимального элемента программа выводит слишком большое число. #include <iostream> using namespace std; int main() { setlocale(0,""); int maximum; float numbers, ...
C++ Sentence. Записать число прописью Once upon a time in a land far far away, inhabited only by math students, Iva and Vedran were discussing self-explanatory sentences. A part of these sentences is exactly one number and it is equal to... подробнее

Показать сообщение отдельно
IIARTEMII
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
Завершенные тесты: 1
22.07.2014, 23:50
Это всё понятно
Теперь у меня вопрос, чтобы не создавать новую тему:
Что это за механизм такой, который реагирует на отсутствие виртуального деструктора, если по сути это приводит к утечке памяти, а не к программной ошибке (да, UB может привести к ошибке, а может и нет, но...)? Почему этот механизм себя проявляет только в MSVS? В других продуктах такого никогда не видел

Ведь если у нас есть базовый класс, есть унаследованный от него дочерний:
C++
1
2
3
Base *ptr = new Der;
// ...
delete ptr;
при отсутствии виртуального деструктора будет вызван деструктор Base, а он, собственно, почистит область памяти, выделенную под объект класса Base (+ выполнение того кода, что у него внутри)

Если схематично представить память, то:
|- - - - Base - - - -| - - Der - - |
при подходе выше, у нас будет:
| - - - - - - - - - - | - - Der - - |
Почему тут ошибка? Или тут немножко всё не так?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru