Вышеупомянутое неверно и выдает неверное значение «-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).

Так чья работа помнить эти вещи? Сохраняет ли ОС какой-либо тип записи в фоновом режиме? (Я имею в виду, я понимаю, что я начал этот пост, говоря, что то, что происходит, не определено, но факт в том, что сценарий «убийства» не происходит, поэтому в практическом миректо то вспоминает.)

Ответы на вопрос(16)

Ваш ответ на вопрос