Presentation is loading. Please wait.

Presentation is loading. Please wait.

개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.

Similar presentations


Presentation on theme: "개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay."— Presentation transcript:

1 개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay

2 이번 장에서 학습할 내용 동적 메모리 할당에 대한 개념을 이해합니다. 동적 메모리 할당의 이해 동적 메모리 할당 관련 함수

3 이번 장에서 만들 프로그램

4 동적 할당 메모리의 개념 프로그램이 메모리를 할당받는 방법 정적(static) 동적(dynamic)

5 정적 메모리 할당 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것
프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것 메모리의 크기는 프로그램이 시작하기 전에 결정 int sarray[10]; 처음에 결정된 크기보다 더 큰 입력이 들어온다면 처리하지 못함 더 작은 입력이 들어온다면 남은 메모리 공간은 낭비

6 동적 메모리 할당 실행 도중에 동적으로 메모리를 할당 받는 것 사용이 끝나면 시스템에 메모리를 반 납
필요한 만큼만 할당을 받고 메모리를 매우 효율적으로 사용 malloc() 계열의 라이브러리 함수를 사용

7 동적 메모리 할당 절차

8 malloc()

9 free()

10 예제 #1 #include <stdio.h> #include <stdlib.h>
int main(void) { char *pc; pc = (char *)malloc(1*sizeof(char)); if (pc == NULL) { printf("메모리 할당 오류\n"); exit(1); } *pc = 'a'; printf("%c \n", *pc); free(pc); return 0;

11 예제 #2 #include <stdio.h> #include <stdlib.h>
int main(void) { int *pi; pi = (int *)malloc(5 * sizeof(int)); if (pi == NULL) { printf("메모리 할당 오류\n"); exit(1); } *pi = 1; // pi[0] = 1; *(pi + 1) = 2; // pi[1] = 2; *(pi + 2) = 3; // pi[2] = 3; *(pi + 3) = 4; // pi[3] = 4; *(pi + 4) = 5; // pi[4] = 5; free(pi); return 0;

12 Lab: 사용자가 입력하는 크기의 배열을 만들어 보자.
이번 실습에서는 사용자에게 원하는 항목의 개수를 물어보고 그 크 기의 배열을 동적으로 생성하자.

13 Sol: #include <stdio.h> int main(void) { int *p; int i, items;
printf("항목의 개수는 몇개입니까? "); scanf("%d", &items); p = (int*)malloc(sizeof(int)*items); for (i = 0; i < items; i++) { printf("항목(정수)을 입력하시오: "); scanf("%d", &p[i]); } printf("\n입력된 값은 다음과 같습니다: \n"); for (i = 0; i < items; i++) printf("%d ", p[i]); printf("\n"); free(p); return 0;

14 Lab: 동적 배열을 난수로 채워보자. 크기가 1000인 동적 배열을 생성하고 동적 배열을 난수로 채워보자. 동적 배열의 원소 중에서 최대값을 계산하여 출력하여 본다.

15 Sol: #include <stdio.h> #include <stdlib.h>
#define SIZE 1000 int main(void) { int *p = NULL; int i = 0; p = (int *)malloc(SIZE * sizeof(int)); if (p == NULL) { printf("메모리 할당 오류\n"); exit(1); } for (i = 0; i < SIZE; i++) p[i] = rand();

16 Sol: int max = p[0]; for (i = 1; i < SIZE; i++) {
if (p[i] > max) max = p[i]; } printf("최대값=%d \n", max); free(p); return 0;

17 구조체를 동적 생성해보자. struct Book { int number; char title[100]; };
struct Book *p; p = (struct Book *)malloc(2 * sizeof(struct Book));

18 예제 #include <stdio.h> #include <stdlib.h>
#include <string.h> struct Book { int number; char title[100]; }; int main(void) { struct Book *p; p = (struct Book *)malloc(2 * sizeof(struct Book)); if (p == NULL) { printf("메모리 할당 오류\n"); exit(1); }

19 예제 p[0].number = 1; // (*p).number = 1
strcpy(p[0].title, "C Programming"); p[1].number = 2; // (*p+1).number = 2 strcpy(p[1].title, "Data Structure"); free(p); return 0; }

20 Lab: 동적 구조체 배열 자신이 가지고 있는 모든 영화 DVD를 구조체의 배열을 만들어서 정 리하고 싶다. 영화의 개수를 사용자로부터 받아서 구조체의 배열을 동적 생성하고 여기에 모든 정보를 저장해보자.

21 Sol: #include <stdio.h> #include<stdlib.h> // 영화를 구조체로 표현
struct movie { char title[100]; // 영화 제목 double rating; // 영화 평점 }; int main(void) struct movie *ptr; int i, n; printf("영화의 개수: "); scanf("%d", &n); ptr = (struct movie*) malloc(n * sizeof(struct movie)); if (ptr == NULL) { printf("메모리 할당 오류\n"); exit(1); }

22 Sol: for (i = 0; i < n; i++) { printf("영화 제목:");
scanf("%s", ptr[i].title); printf("영화 평점:"); scanf("%lf", &ptr[i].rating); } printf("\n=======================\n"); for (i = 0; i < n; i++) { 동적 메모리를 배열로 간주하고 사용하면 된다. printf("영화 제목: %s \n", ptr[i].title); printf("영화 평점: %lf \n", ptr[i].rating); printf("=======================\n"); free(ptr); return 0;

23 Q & A


Download ppt "개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay."

Similar presentations


Ads by Google