Code Archive/C언어

Step12. 동적 메모리 할당(malloc/realloc)

쌍큐 2014. 9. 12. 13:03

- 기본 배열이 크기 고정이 되어있었기 때문에 메모리 낭비가 되거나 모자른 문제 생겼음

  프로그래머가 필요한만큼 메모리를 할당/재할당 하는 방법이 나왔음


- malloc 사용법(할당)

(가리킬 변수 타입의 포인터)malloc(바이트 크기);


ex>

int *ptr;

ptr = (int *)malloc(20);

//사용은 배열쓰듯이 사용


- realloc 사용법(재할당)


ex>

ptr = (int *)realloc(재할당할 포인터, 재할당할 크기);

//재할당 수행시 할당한 메모리가

//기존 작으면 맨 끝에 있는 데이터부터 지워짐


기본예제>

#include <stdio.h>

#include <malloc.h>

void main(){

int *arr;

int size=10,i;

arr = (int *)malloc(sizeof(int)*size);

for(i=0;i<size;i++){

scanf("%d",&arr[i]);

}

for(i=0;i<size;i++){

printf("%d\n",arr[i]);

}

size = 5;

arr = (int *)realloc(arr,sizeof(int)*size);

for(i=0;i<10;i++){

printf("%d\n",arr[i]);

}

free(arr);


}


ex>

#include <stdio.h>

#include <malloc.h>

struct Product{

char name[20];

int price;

};

void main(){

Product *arr = (Product *)malloc(sizeof(Product)*5);

int i;


for(i=0;i<5;i++){

scanf(" %s",arr[i].name);

scanf(" %d",&arr[i].price);

}


for(i=0;i<5;i++){

printf("제품명 : %s\t제품가격 : %d\n",

arr[i].name,arr[i].price);

}

arr = (Product *)realloc(arr,sizeof(Product)*10);

for(;i<10;i++){

scanf(" %s",arr[i].name);

scanf(" %d",&arr[i].price);

}


for(i=0;i<10;i++){

printf("제품명 : %s\t제품가격 : %d\n",

arr[i].name,arr[i].price);

}

free(arr);

}


'Code Archive > C언어' 카테고리의 다른 글

Step14. 선행처리자(#define/#include)  (0) 2014.09.12
Step13. 열거형(enum)  (0) 2014.09.12
Step11. 구조체(struct)  (0) 2014.09.12
Step10. Call by Value, Call by Reference  (0) 2014.09.06
Step9. 데이터 캐스팅  (0) 2014.09.06