- 기본 배열이 크기 고정이 되어있었기 때문에 메모리 낭비가 되거나 모자른 문제 생겼음
프로그래머가 필요한만큼 메모리를 할당/재할당 하는 방법이 나왔음
- 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 |