본문 바로가기

카테고리 없음

[C언어] 동적할당 malloc() 함수

void main()
{
	int *arScore;
	int i, stNum;
	int sum;

	printf("학생수를 입력하세요 : ");
	scanf("%d", &stNum);
	arScore = (int*)malloc(stNum * sizeof(int));

	if(arScore == NULL)
	{
		printf("메모리가 부족합니다.\n");
		exit(0);
	}

	for(i = 0; i < stNum; i++)
	{
		printf("%d번 학생의 성적을 입력하세요 : ", i + 1);
		scanf("%d", &arScore[i]);
	}

	sum = 0;
	for(i = 0; i < stNum; i++)
	{
		sum+=arScore[i];
	}

	printf("\n총점은 %d점이고 평균은 %d점입니다.\n", sum, sum / stNum);
	free(arScore);
}

프로그램 실행화면


어떤 상황에서나 배열을 사용할 수 있다면 참 편할 것이다. 하지만 프로그램을 실행하는 도중 그 길이가 정해져야 하는 상황이 있다. 학생들의 평균을 구하는 프로그램을 구현해야 한다고 하자.


만약 조건이 학생 들의 수가 정해지지 않았고 변동 가능하며 그 범위도 정해지지 않았다고 하자, 그럼 이를 배열로 선언해 프로그램을 완성시킬 수 있을까?


가능은 하겠지만 만약 배열을 잡아놓은 길이보다 학생수가 많다면 어떻게 될 것이가? 그럼 오류가 나는 프로그램이 되고 많다. 이럴 때 필요한 것이 바로 동적할당이다.


필요한 만큼 메모리를 할당해 배열을 만든다고 생각하면 쉬울 것이다.


arScore = (int*)malloc(stNum * sizeof(int));


바로 이부분이 사용자가 입력한 학생수에 해당하는 만큼 메모리를 할당해 주는 부분이다. 이 부분이 잘 이해가지 않는다면 암기라도 해야한다.


학생 수 * sizeof(int)를 함으로써 int형 배열을 선언하되 그 길이는 학생 수 만큼이 되는 것이다. 나머지 부분은 이해하는데 어려움이 없을 것이라 생각한다.


그리고 잊지 말아야 하는 것이 free()함수를 통해 메모리를 반환해 주어야 한다는 것이다.