본문 바로가기
C/☞

[54] 동적할당 기본

by TR. 2020. 7. 27.

동적할당

 

1) 포인터 변수 선언 (stack)

2) new를 통한 heap 메모리에 임시 배열생성

   ㄴ new 자료형[배열크기]

3) 선언한 변수에 배열대입 [인덱스 0~]

4) delete[] 포인터명 : heap 메모리 삭제

 

1. 동적메모리는 반드시 포인터 변수에 저장해야 한다.

2. 동적메모리는 메모리 누수를 막기 위해 삭제하는 기능이 있다.


    // 1. 동적메모리는 반드시 포인터 변수에 저장해야 한다.
    int *a = new int;   // heap 메모리에 한개 생성
    int *b = new int[3];// heap 메모리에 3개 생성

    // 2. 동적메모리는 메모리 누수를 막기 위해 삭제하는 기능이 있다.
    delete a;
    delete[] b;

    // Stack & Heap
    int num = 10;
    int arr[3] = {0};
	
    // . 가변 : 동적할당
    // . 배열 선언 시, '배열의 크기는 상수'로 할당
    int size = 5;
    int *p = new int[size];   // O
    //int p[size] = {0};  	  // X : error
                              // size는 변수
                              // (const로 상수선언 시, 사용가능 : 권장X)    
    delete[] p;

    p[0] = 10;
    p[1] = 20;
    p[2] = 30;
    p[3] = 40;
    p[4] = 50;
    for(int i=0; i<count; i++){
        printf("%d ", p[i]);
    }

 

 


* malloc() 함수의 사용 / Memory Allocation

ㄴ (포인터자료형) malloc( 할당할사이즈 );

 

void main() {
	printf("%d\n", sizeof(char));		// 1

	char* p = new char[10];
	char* m = (char*)malloc(sizeof(char) * 10);

	printf("sizeof(p) : %d\n", sizeof(p));	// 8 : 포인터의 사이즈
	printf("sizeof(m) : %d\n", sizeof(m));	// 8

	printf("sizeof(p) : %d\n", _msize(p));	// 10 : 포인터가 가리키는 대상의 사이즈

	free(p);
	free(m);

	char* a = new char[10];
	printf("sizeof(a) : %d\n", sizeof(a));	// 8 : 포인터의 사이즈
	printf("sizeof(a) : %d\n", _msize(a));	// 10 : 포인터가 가리키는 대상의 사이즈 

	delete[] a;




	system("pause");
}

 

* malloc()

* calloc() / Contiguous Allocation 

ㄴ (포인터자료형) calloc( 개수, 자료형사이즈 );

* realloc() / Re Allocation

ㄴ (포인터자료형) calloc( 재할당대상, 할당할사이즈 );

 

# include <stdio.h>
# include <stdlib.h>

int main(){
    //
    int size = 5;
    int *p = (int*)malloc(sizeof(int)*size);
    for(int i=0; i<size; i++){
        p[i] = i +1;
    }

    //p = (int*)calloc(size+1, sizeof(int));
    //size++;

    p = (int*)realloc(p, sizeof(int)*(size*2));
    size *= 2;
    
    for(int i=0; i<size; i++){
        printf("%d ", p[i]);
    }
    
    

    return 0;
}

'C > ' 카테고리의 다른 글

[55]-A. 가변 배열 컨트롤러  (0) 2020.07.27
[55] 가변 배열 컨트롤러  (0) 2020.07.27
[52] 문자열 함수  (0) 2020.07.27
[51] 문자열 기본  (0) 2020.07.27
[00]-A. 캐릭터 이동  (0) 2020.07.24

댓글