Written by coh at home

동적메모리 예제 본문

languages/c

동적메모리 예제

och 2022. 3. 25. 18:51

앞서 작성한 정적 메모리 예제와 비교하면 말도 안 되게 memory usage를 아낄 수 있다. 

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#include<string.h>
#include<stdlib.h>

#define MAXNAME 64
int heapusage = 0;

typedef struct {
	int age;
	float score;
	char *name;
}student;

//일일이 data입력하려면 귀찮으니 그냥 random variable로 지정.
void set_student(student* dst)
{
	dst->age = rand() % 100;
	dst->score = rand() % 100;
	int nameLEN = rand() % MAXNAME;
	dst->name = (char*)calloc(nameLEN, sizeof(char));
	heapusage += sizeof(char) * nameLEN;
	for (int i = 0; i < nameLEN; i++)
	{
		dst->name[i] = 'a' + rand() % 26;
	}
}

int main(void)
{
	int numstudent = 0;
	printf("How many student? ");
	scanf("%d", &numstudent);
	student* students = (student*)malloc(sizeof(student) * numstudent);
	memset(students, 0, sizeof(student) * numstudent);
	heapusage += sizeof(student) * numstudent;

	for (int i = 0; i < numstudent; i++)
	{
		set_student((students+i));
	}

	float avg = 0;
	for (int i = 0; i < numstudent; i++)
	{
		//avg += studnets[i].score;
		avg += (students+i)->score;
	}
	avg /= numstudent;
	printf("Average acore =%.2f\n", avg);

	for (int i=0;i<numstudent;i++)
		//students[i].name
		if ((students+i)->name)
		{
			free((students + i)->name);
			(students + i)->name == NULL;
		}
	if (students)
	{
		free(students);
		students = NULL;
	}
	printf("heap usage = %d\n", heapusage);
	return 0;
}

'languages > c' 카테고리의 다른 글

보물지도 찾기.  (0) 2022.03.31
c언어 data filter 만들기  (0) 2022.03.29
동적메모리  (0) 2022.03.24
정적 메모리 예제  (0) 2022.03.24
.c file I/O studentDB.bin  (0) 2022.03.23