[동적메모리]
정적메모리: 프로그램이 실행되기 전에 할당되는 메모리
동적메모리: 프로그램 실행중에 할당되는 메모리
사용목적
-배열의 단점을 보완하기 위해
> 배열은 고정크기를 가지기 때문이다.
방법
#include <stdlib.h>
malloc()함수 사용
<구조>
malloc(크기):
크기(byte)만큼 메모리를 할당하는 메모리의 시작 주소값을 반환
포인터 = malloc(크기)
malloc()함수는
리턴타입이 void* 타입이므로 오류가 발생할 수 있으므로, 강제 형변환을 시켜줘야 한다.
-> 포인터와 동일한 자료형으로 변경
-malloc(크기)
크기는 정수값으로 지정할 시, 실수할 수 있으므로
sizeof()함수를 사용하기
sizeof(자료형 or 변수 or 값)
자료형의 byte 크기를 반환
——————————————————
메모리 구조
[스택영역]
- 생명주기: 함수의 호출~종료까지 존재
>지역변수, 매개변수
[힙영역]
- 생명주기: 메모리 할당~해제 까지 존재
>동적으로 메모리를 할당받는 공간
[데이터영역]
- 생명주기: 프로그램 실행~종료까지 존재
>전역변수, 정적변수(static)
——————————————————-
동적으로 할당받은 메모리
해제하는방법?
free(포인터명);
———————————————————
<실습>1차원배열동적메모리.c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *pa;
pa = (int *)malloc(sizeof(int) * 3);
pa[0] = 10;
pa[1] = 20;
pa[2] = 30;
for (int i = 0; i < 3; i++) {
printf("pa[%d]:%d\n", i, pa[i]);
}
free(pa);
return 0;
}
동적으로 3개의 정수형 변수들을 묶어서 관리할 수 있는 배열을
생성하기
malloc(sizeof(자료형)*개수)
: 자료형의 변수를 개수만큼 저장할 크기를 동적으로 할당
——————————————————————————-
<실습>점수동적할당.c
#include <stdio.h>
#include <stdlib.h>
int main() {
int count;
int *par =NULL;
printf("점수의 개수:");
scanf("%d", &count);
par = (int *)malloc(sizeof(int)*count);
for (int i = 0; i < count; i++) {
printf("점수%d:", i + 1);
scanf("%d", (par + i));
}
for (int i = 0; i < count; i++) {
printf("점수%d:%d\n", i + 1,par[i]);
}
free(par);
return 0;
}
사용자에게 몇개의 점수를 묶을 것인지 입력받는다.
점수의개수:(입력)
점수1:
점수2:
점수3:
<출력결과>
점수1:
점수2:
점수3:
'프로그래밍 > C' 카테고리의 다른 글
구조체 (0) | 2020.08.10 |
---|---|
이차원배열의 동적할당 (0) | 2020.08.09 |
이중포인터 (0) | 2020.08.04 |
포인터배열,배열포인터 (0) | 2020.08.04 |
포인터-2 (0) | 2020.08.02 |