C/기초

동적 메모리 활용

appmaster 2019. 8. 2. 15:14

동적 메모리 할당 기술은 C언어에서 고급 프로그램 개발이 이루어질 때 빠질 수 없는 부분이다. 동적 메모리에 대한 활용이 익숙해지만 메모리에 대한 이해도가 높아지고 메모리를 적절하게 사용하는 방법을 알게 된다. 따라서 동적 메모리에 대한 개념을 바르게 이해하고 이를 활용할 수 있도록 반복적으로 이를 활용해 볼 필요가 있다.

#include <stdio.h>
#include <stdlib.h>

//구조체의 동적 메모리 할당



struct Book {
	int number;
	char title[100];
};



void showBook(struct Book* p, int n) {
	int i;
	for (i = 0; i < n; i++) {
		printf("번호 = %d : %s\n", (p + i)->number, (p + i)->title);
	}
}



int main(void){
	struct Book* p; // struct Book에 해당하는 포인터를 만들어서 구조체를 할당받는다.
	
	p = (struct Book*)malloc(2 * sizeof(struct Book));
	if (p == NULL) {
		printf("동적 메모리 할당에 실패했습니다.\n");
		exit(1);
	}
	p->number = 1; //구조체 포인터같은 경우는 '.'을 이용하는것이 아니라 화살표를 이용해서 접근한다.
	//p라는 구조체의 number에 값을 1로 넣어준거다.

	strcpy(p->title, "C Programming");

	(p + 1)->number = 2;
	strcpy((p + 1)->title, "Data Structure");

	showBook(p, 2);
	free(p);

	return 0;
}

 

#include <stdio.h>
#include <stdlib.h>

//동적 메모리 2차원 배열


int main(void){
	int i, x, y;
	int** pptr = (int**)malloc(sizeof(int*) * 8);
	//int형 배열을 가지고 있는 포인터를 만든거나 마찬가지.
	//각 한칸당 포인터를 할당하고 있는데 각 한칸의 포인터는 또다른 배열을 할당하고 있는 것이다.

	for (i = 0; i < 8; i++) {
		*(pptr + i) = (int*)malloc(sizeof(int) * 6);
	}


	for (y = 0; y < 8; y++) {
		for (x = 0; x < 6; x++) {
			*(*(pptr + y) + x) = 6 * y + x;
		}
	}


	for (y = 0; y < 8; y++) {
		for (x = 0; x < 6; x++) {
			printf("%3d", *(*(pptr + y) + x));
		}
		printf("\n");
	}


	for (y = 0; y < 8; y++) {
		free(*(pptr + y));
	}


	return 0;
}

포인터를 활용하면 전반적으로 어떻게 메모리를 사용하고 어떻게 활용이 되는지 알 수 가 있다.

'C > 기초' 카테고리의 다른 글

동적 메모리  (0) 2019.08.01
파일 입출력  (0) 2019.08.01
구조체 활용  (0) 2019.07.30
구조체  (0) 2019.07.30
문자열  (0) 2019.07.30