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

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

제14장 동적 메모리.
#include <stdio.h> int main(void) { float radius; // 원의 반지름
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
Chapter 03 배열, 구조체, 포인터.
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
CHAP 3:배열, 구조체, 포인터.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
head data link data link data link NULL a b c
누구나 즐기는 C언어 콘서트 제8장 배열.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
25장. 메모리 관리와 동적 할당.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
임베디드 실습 # LED, 7’Segment 제어
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
제8장 배열 1부 8.1 배열 8.2 배열의 초기화 8.3 배열의 응용 8.4 정렬과 탐색 8.5 다차원 배열.
프로그래밍 랩 – 7주 리스트.
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
11장. 1차원 배열.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
어서와 C언어는 처음이지 제14장.
어서와 C언어는 처음이지 제15장.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
메모리 관리 & 동적 할당.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
데이터 동적 할당 Collection class.
토론을 위한 질문 배열의 이름에는 무엇이 저장되는가? C언어에서 배열 추상데이터의 store는 어떻게 구현 되는가?
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
어서와 C언어는 처음이지 제23장.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제7장 배열 출처: pixabay.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
개정판 누구나 즐기는 C언어 콘서트 제3장 변수와 자료형 출처: pixabay.
Chapter 09. 배열.
13. 포인터와 배열! 함께 이해하기.
어서와 C언어는 처음이지 제22장.
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
11장. 1차원 배열.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

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

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

이번 장에서 만들 프로그램

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

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

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

동적 메모리 할당 절차

malloc()

free()

예제 #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;

예제 #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;

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

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;

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

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();

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;

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

예제 #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); }

예제 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; }

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

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); }

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;

Q & A