Вышеупомянутое неверно и выдает неверное значение «-1» считает элементы В 64-битной ОС Windows правильный размер буфера находится в Ptr - 4 байта адреса
о, я думаю, что мы все согласны с тем, что то, что происходит со следующим кодом, не определено, в зависимости от того, что передано,
void deleteForMe(int* pointer)
{
delete[] pointer;
}
Указатель может быть всевозможным, поэтому он выполняет безусловныеdelete[]
на это не определено. Тем не менее, давайте предположим, что мы действительно передаем указатель массива,
int main()
{
int* arr = new int[5];
deleteForMe(arr);
return 0;
}
Мой вопрос в этом случае, когда указательявляется массив, кто это знает? Я имею в виду, с точки зрения языка / компилятора, он понятия не имеет,arr
является указателем массива по сравнению с указателем на один int. Черт, он даже не знает,arr
был динамически создан. Тем не менее, если я сделаю следующее вместо этого,
int main()
{
int* num = new int(1);
deleteForMe(num);
return 0;
}
Операционная система достаточно умна, чтобы удалить только один тип int и не выполнять какой-либо тип «уничтожения веселья», удаляя остальную часть памяти после этой точки (в отличие отstrlen
и не\0
заданная строка - она будет продолжаться, пока не достигнет 0).
Так чья работа помнить эти вещи? Сохраняет ли ОС какой-либо тип записи в фоновом режиме? (Я имею в виду, я понимаю, что я начал этот пост, говоря, что то, что происходит, не определено, но факт в том, что сценарий «убийства» не происходит, поэтому в практическом миректо то вспоминает.)