> 백엔드 개발 > C++ > `delete ptr` 대 `delete[] ptr`: 왜 하나는 안전하고 다른 하나는 메모리 누수인가요?

`delete ptr` 대 `delete[] ptr`: 왜 하나는 안전하고 다른 하나는 메모리 누수인가요?

DDD
풀어 주다: 2025-01-03 08:15:40
원래의
123명이 탐색했습니다.

`delete ptr` vs. `delete[] ptr`: Why is One Safe and the Other a Memory Leak?

delete로 배열을 삭제하는 것은 delete[]와 동일합니까?

동적 배열을 다룰 때 삭제와 삭제의 차이점을 이해하는 것이 중요합니다. 개별 요소를 삭제하고 delete[]를 사용하여 전체 배열을 삭제합니다.

삭제하는 이유 ptr은 정의되지 않은 동작을 일으킬 수 있습니다

제공된 코드에서

IP_ADAPTER_INFO *ptr = new IP_ADAPTER_INFO[100];
로그인 후 복사

ptr은 100개의 IP_ADAPTER_INFO 구조 배열을 가리킵니다. delete ptr을 사용하여 포인터를 삭제하는 것은 배열의 첫 번째 요소를 삭제하는 것과 같습니다. 그러나 이렇게 하면 나머지 99개 요소가 할당됩니다. 이로 인해 메모리 누수가 발생할 수 있습니다.

디스어셈블리 코드 분석

Visual Studio 2005에서 삭제 ptr 및 삭제 []ptr을 위해 생성된 디스어셈블리 코드는 차이점을 명확하게 보여줍니다.

  • delete ptr: ptr이 가리키는 메모리만 해제합니다(첫 번째 요소).
  • delete []ptr: 전체 배열을 올바르게 할당 해제하는 연산자 delete[]를 호출합니다.

결론

피하려면 정의되지 않은 동작을 방지하고 메모리 누수를 방지하려면 항상 delete []ptr을 사용하여 new로 동적으로 할당된 배열을 할당 해제하세요. 일부 컴파일러는 delete ptr을 정상적으로 처리할 수 있지만 이는 신뢰할 수 없는 관행이므로 피해야 합니다.

위 내용은 `delete ptr` 대 `delete[] ptr`: 왜 하나는 안전하고 다른 하나는 메모리 누수인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿