[C++] 6.11 동적 할당 new와 delete
by #독개#/*
우리가 만든 프로그램에 메모리가 할당되는 방식은 3가지다
1. Static Memory Allocation 정적 메모리 할당
전역변수나 static 변수같이 프로그램 시작할때 할당받아서 끝날때까지 계속 가지고 있음
2. 자동메모리할당
{ }내에 변수를 선언하거나 정적배열을 했을때 { } 밖으로 나가면 사라지고 OS로 반납하는 방식
3. Dynamic Memory Allocation 동적 메모리 할당
메모리를 할당 받고 싶을때 받고 OS로 돌려주고 싶을때 돌려줄 수 있다
프로그램이 종료될때 OS에게 모든 할당받은 메모리를 돌려주는데 그전에 프로그램과정속에 내가 원할때 돌려주는거
이런 메모리들을 직접 선택해서 사용해줘야해서 c++이 어려운데 너무걱정안해도된다
결국 우리는 잘만들어진 라이브러리(메모리관리도 잘해둠)을 가져다 쓸거기 때문이지
이런것이 있고 원리를 이해하도록 하자
*/
#include <iostream>
using namespace std;
int main()
{
//int array[1000000]; //오류가 발생한다 프로그래머 입장에서 바라볼땐 4메가 정도는 매우 작은 메모리이지만
//우리가 메모리 할당받을때 받을수 있는게 stack영역 , heap영역인데 동적할당은 heap 이고 훨씬크다
//생각해봐 main의 { }가 언제끝날지 모르는데 정적으로 계속 4메가바이트의 메모리를 쓰고있으면 이프로그램은 말도안되지 그래서 오류남
int* ptr = new int; //new int는 int var;과 같은데 int에 맞는 4바이트 메모리를 하나 만든다음에 주소값을 반환해준다
*ptr = 7;
cout << ptr << endl;
cout << *ptr << endl;
//int* ptr = new int(7); or new int{7}; 다가능
delete ptr; //OS에게 메모리 돌려줌 돌려주면 ptr에 주소값은 계속 보관중인데 찾아가면 쓰레기값으로 바뀌어져있다
//오호 ptr OS에 반납하고 나서는 이제 접근못하도록 바꼇네? 버전이 올라가면서 바뀐듯하다
//원래는 이걸 방지하기위해서 delete하고난뒤에는 ptr = nullpt; 를 넣어줬었다
cout << "After delete" << endl;
//cout << ptr << endl;
//cout << *ptr << endl;
///---------------------------------------------------------------------------
//만약에 내가 큰메모리를 동적할당 했는데 컴퓨터가 안좋아서 메모리공간이 다른프로그램에서 다쓰고 있으면
//원래는 내 프로그램이 꺼진다 그런데 꺼지지않고 그냥 넘어가도록
int* ptr = new (std::nothrow) int{ 7 }; //이메모리가 할당이안되면 ptr에 null을 넣고 지나감
///----------------------------------------------------------------------------
//메모리 누수 이런실수를 조심하자
while (true)
{
int* ptr = new int;
cout << ptr << endl;
//delete ptr; 이걸빼먹어서 그럼
}
return 0;
}
🐱👓독하게 개발
'🔥 프로그래밍 학습 > C++' 카테고리의 다른 글
[C++] 6.13 포인터와 const (0) | 2022.11.15 |
---|---|
[C++] 6.12 동적 할당 배열 (0) | 2022.11.15 |
[C++] 6.10 C스타일의 문자열 심볼릭 상수, cout 문자열주소출력 (0) | 2022.11.15 |
[C++] 6.8 포인터와 정적 배열은 같다 (0) | 2022.11.15 |
[C++] 6.4 정적 다차원 배열 (0) | 2022.11.14 |
블로그의 정보
독한 개발자
#독개#