✅ 목표 (Goal)

✅ 정상적으로 동작하는 것처럼 보이지만 매우 위험한 코드

어떤 점이 위험한지 손파일리 해보자.

#include <iostream>

int* foo() {
	int a = 11;
	int* pa = &a;
	std::cout << "in foo() *pa=" << *pa << std::endl;
	return pa;
}

int main() {
	int* pa = nullptr;
	pa = foo();
	std::cout << "main() *pa=" << *pa << std::endl;
	// delete(pa); (1)
	return 0;
}

image.png

(1) 코드의 주석을 풀고 돌려보자.

항상 메모리를 해제하라는 습관을 들이라 그래서, 사용후 해제했더니, 발생하는 이 경고창은 뭘까?

오히려 delete를 안해주면 경고 1개 뿐이었는데, 왜 이런 에러가 날까?

image.png

존재 하지 않는 메모리를 삭제하려고 했기 때문이다.

✅ 이러면 에러 안나지만.. 피곤해진다.

댕글링 포인터를 제거하면 문제는 사라지지만 매우 번거로와 진다.

그래서 참조를 반환하지 말라는 거다.