자, 우리는 전달 된 내용에 따라 다음 코드에서 발생하는 일이 정의되지 않은 것에 동의합니다.
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;
}
OS는 단 하나 개의 INT를 삭제하고 그와 함께 (그 시점을 넘어 대조를 메모리의 나머지 부분을 삭제하여 '골라서 죽이는'의 몇 가지 유형에하지에 스마트 충분 strlen
하고 비\0
문자열 조회수 0).
이 일을 기억하는 것이 누구의 일입니까? OS가 백그라운드에서 어떤 유형의 레코드를 유지합니까? (나는 무슨 일이 일어 났는지는 정의되지 않았다고 말 함으로써이 게시물을 시작했음을 알고 있지만 실제로는 '죽이는 행위'시나리오가 발생하지 않으므로 실제 세계에서 누군가 가 기억하고 있습니다.)