[C++] 힙의 메모리 할당 및 소멸을 위한 new&delete

marceline·2023년 1월 9일
0

[C++]

목록 보기
4/7

동적할당

사용할 메모리 공간을 할당하는 것

메모리 공간 사용이 끝난 후, 할당을 해제하는 이유?

-> 메모리 공간 낭비를 줄이기 위함!

컴퓨터 메모리 구조

스택 (Stack) : 지역변수와 매개변수 등이 할당되는 임시적인 영역

힙 (Heap) : 동적으로 메모리를 할당하는 곳, 생성 중 크기를 결정

데이터 (Data) : 전역변수, 정적 (static) 변수, 초기화 된 배열 등이 존재

코드 (Code) : 프로그램 & 기계어 명령 존재

malloc & free

# include <iostream>
# include <string.h>
# include <stdlib.h>
using namespace std;

char *MakeStrAdr(int len){
    char *str=(char*)malloc(sizeof(char)*len);
    return str;
}

int main(void){
    char *str=MakeStrAdr(20);
    strcpy(str, "I am so happy~");
    cout<<str<<endl;
    free(str);
    return 0;
}

new & delete

new

  • int 형 변수의 할당
int *ptr1=new int;
  • double 형 변수의 할당
double *ptr2=new double;
  • 길이가 3인 int 형 배열의 할당
int *arr1=new int[3];
  • 길이가 7인 double 형 배열의 할당
#### double *arr2=new double[7];

delete

  • 앞서 할당한 int 형 변수의 소멸
delete ptr1;
  • 앞서 할당한 double 형 변수의 소멸
delete ptr2;
  • 앞서 할당한 int 형 배열의 소멸
delete []arr1;
  • 앞서 할당한 double 형 배열의 소멸
delete []arr2;

new & delete 사용 예

# include <iostream>
# include <string.h>

using namespace std;

char *MakeStrAdr(int len){
    // char *str=(char*)malloc(sizeof(char)*len);
    char *str=new char[len];
    return str;
}

int main(void){
    char *str=MakeStrAdr(20);
    strcpy(str, "I am so happy~");
    cout<<str<<endl;
    // free(str);
    delete []str;
    return 0;
}

0개의 댓글