Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > В чем разница?


Автор: Ukrajinec 26.2.2015, 21:31
Доброго времени суток!
Объясните пожалуйста, в чем разница между
Код

myObj *x = new myObj[100];
delete x;

и
Код

myObj *x = new myObj[100];
delete [] x;

?

Автор: kemiisto 26.2.2015, 22:51
Первый вариант неправильный и вызовет неопределённое поведение во время выполнения программы (порча кучи и падение программы - наиболее вероятный исход), второй - правильный. Правило простое: каждому new должен соответствовать delete, а каждому new [] - delete [].

В стандарте (5.3.5/2) чётко сказано (выделение жирным - моё):
Цитата
In the first alternative (delete object), the value of the operand of delete may be a null pointer value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject (1.8) representing a base class of such an object (Clause 10). If not, the behavior is undefined. In the second alternative (delete array), the value of the operand of delete may be a null pointer value or a pointer value that resulted from a previous array new-expressionIf not, the behavior is undefined.

Автор: Ukrajinec 27.2.2015, 00:33
Большое спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)