Здравствуйте, PowerUserX, Вы писали:
PUX>Проблемы нет, перед пусть кладут что угодно
Смотри, ты попросил в new int[32] 128 байт памяти, а operator new[] взял, да и выделил 132. В первые 4 положил что-то там своё, а тебе вернул адрес пятого (то есть реальный адрес блока + 4)
Если ты позовёшь с эти адресом operator delete[], то он 4 вычтет, свои данные найдёт и всё правильно сделает. В том числе и освободит ВЕСЬ блок.
А если ты позовёшь operator delete, то он просто освободит часть блока, вернее попытается, и всё...
То есть ситуация получится примерно такая:
struct XXX {
int hiddenField;
int array[32];
};
int* array = new XXX->array;
delete array; // Упс
PUX>auto pBuffer = new int[32];
PUX>char* pBuffer = (char*)malloc(32 * sizeof(int));
PUX> ^
PUX> |
PUX> | — тут длиннее
PUX>и вот зачем мне писать delete [] pBuffer ?
Ну успехов тебе в труде. Не забудь прислать этот пример оригинальности и свежести своего мышления в своё партфолио и приложить к резюме, когда будешь искать след. работу...
PUX>P.S. Честно я все это писал немного шоб потролить — у нас тут все крутые
Я уже что-то начал подозревать
Держись в общем тут, и хорошего тебе настроения
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском