코드가 올바른 메모리 할당을 해제합니까?포인터에 메모리 할당하기, 다른 포인터를 동일하게 지정하고 두 번째 포인터 삭제하기
int main(){
int *pointerA, *pointerB;
pointerA = new int[15]();
for (int i=0; i<15; i++)
pointerA[i] = i*2;
pointerB = pointerA;
if (pointerA != NULL)
pointerA = NULL;
// Some operation here ...
for (int i=0; i<15; i++)
std::cout << i << " : " << pointerB[i] << std::endl;
if (pointerB != NULL)
delete [] pointerB;
pointerB = NULL;
return 0;
}
내가 pointerA를 사용하여 포인터를 생성하지만, 해제 pointerB을 사용하고 있습니다. pointerB는 pointerA와 같은 위치를 가리 킵니다.
나는 그것이 적절하게 할당 해제되어야한다고 생각하지만 확실히하고 싶습니다. 효율적으로 테스트 할 수있는 방법이 있습니까? 어쩌면 메모리 사용량을 확인하는 거대한 배열을 만드는 것일까 요 ???
감사
정확하게 생각한 것처럼 동작합니다. 그러나 당신은 신경 쓰지 않아야합니다. 벡터 또는 unique_ptr 또는 shared_ptr을 사용하고 포인터에 대해 생각하지 마십시오. – stefan
다른 포인터에 의해 할당 된 메모리를 삭제해도 문제가 없습니다. – augustzf
전적으로 무의미한 내용으로 코드를 난독 처리하는 것을 피하기 위해 언어 기본 사항을 배우는 것이 좋습니다. 'if (pointerA == NULL) pointerA = NULL;은'pointerA = NULL;과 완전히 같습니다. 마찬가지로,'delete' 이전의'NULL' 검사는 불필요합니다,'delete'는 nullpointer로 아무 일도하지 않습니다. 특히'pointerB' * 뒤의 메모리에 접근하기 때문에'NULL'인지 묻는다. NULL이 될 가능성이있는 경우 이미 정의되지 않은 동작을 트리거했을 것입니다. – cmaster