<aside> 💡 목차
</aside>
<aside> 💡 함수 호출 및 포인터를 이해하기 위한 필수 개념

동적메모리 쓸땐.. new 썼으면 delete 꼭 써줘야한다

예를들어서
main(){
alloc()
}
을 선언했다
void alloc(){
int x p;
p=new int[10]; //new 를 썼네?
}
그럼 p를따라가보면 메모리 어딘가에 10개가 할당되었나보네?
근데 이상태에서 delete안하고 다음 코드에
p=new int; 를 하면,
p에 덮어쓰는데, 이러면 둥둥 떠다님
접근도 못하고, 메모리는 차지하는 메모리가 생겨서
결국 메모리의 절대 크기가 작아지는것....
결국 메모리 오버플로우 생기면 커널패닉생김
두번째 케이스는
int *p = new int;
를 했다고 치자.
그럼 p라는애가 힙영역에 쌓이곘지?
int *q = p;
를 했어,
그리고 나중에
delte p 를 하면...
p에는 NULL로 초기화된다 delete하면 NULL이 들어가니까
p는 예외처리를 통해 NULL에 접근 못하게 만들 수 있는데,,,
아까 q는 p를 가르키고있었지?
근데 p는 이제 없는 공간(반환한공간) 인데..
근데 이때
cout << *q
..를 나중에 하면 <u>[**Dangling pointer**](https://cybecho.notion.site/C-14ae7b22c71345eaa769938d22a163a3)</u> 라고 부른다
유효하지 않은 주소참조 문제!
알고리즘단에서 이게 발생 안되도록 잘 해결해...
런타임 오류임
이미 반환된 주소를 액세스 하려는 케이스

C++과 Java의 메모리 관리 방식의 차이점은 다음과 같습니다.
| 언어 | 메모리 관리 방식 |
|---|---|
| C++ | 프로그래머가 직접 관리 |
| Java | 가비지 컬렉터가 관리 |
C++에서는 프로그래머가 직접 메모리를 할당하고 해제해야 합니다. 이를 위해서는 new 키워드를 사용하여 메모리를 할당하고, delete 키워드를 사용하여 메모리를 해제해야 합니다. 프로그래머가 메모리를 적절히 관리하지 않으면 메모리 누수가 발생할 수 있습니다.
Java에서는 가비지 컬렉터가 메모리를 관리합니다. 프로그래머는 new 키워드를 사용하여 메모리를 할당하기만 하면 됩니다. 가비지 컬렉터는 더 이상 사용되지 않는 메모리를 자동으로 해제합니다. 따라서 프로그래머가 메모리를 관리할 필요가 없으므로 메모리 누수를 방지할 수 있습니다.
C++과 Java의 메모리 관리 방식의 장단점은 다음과 같습니다.
| 언어 | 장점 | 단점 |
|---|---|---|
| C++ | 속도가 빠르다. | 메모리 누수에 취약하다. |
| Java | 메모리 누수에 안전하다. | 속도가 느리다. |
C++은 고성능을 요구하는 게임, 그래픽 처리, 과학 계산 등의 분야에서 주로 사용됩니다. Java는 안정성을 요구하는 Web, 모바일, 데스크톱 애플리케이션 등의 분야에서 주로 사용됩니다.
<aside> 💡 소멸자 단에서 메모리 해제를 잘 구현해주자..

오른쪽 아래 주석처리한 멤변수들은 포인터가 아닌 일반 변수기때문에, 굳이 새로운 값으로 초기화 해줄 필요 없다! 어처피 사라지는놈들이기 때문에…
왼쪽에 헤더부분에도 소멸자를 생성해주고,
오른쪽에 소멸자를 정의하는 부분에서, 멤버변수중 포인터가 있다면,
해당 포인터를 꼭! 해제시켜줘야함
</aside>
<aside> 💡 그럼 이제 댕글링 포인터가 발생되지 않음

함수 Foo() 내부에 생성자가 호출되며, 해당 생성자에서 동적 메모리를 할당받는다.
![Foo() 함수가 종료되면, 소멸자에 선언해뒀던
delete[] mChars; 가 실행되면서
동적 메모리 할당받은 영역을 해제하며
댕글링 포인터를 제거한다](https://prod-files-secure.s3.us-west-2.amazonaws.com/09ccd4d5-876c-4bba-bbdf-cc77a0a11257/df515c34-4d90-4fbb-9f8e-481df9d2dd6e/Untitled.png)
Foo() 함수가 종료되면, 소멸자에 선언해뒀던 delete[] mChars; 가 실행되면서 동적 메모리 할당받은 영역을 해제하며 댕글링 포인터를 제거한다
</aside>