슬라이드 1

Similar documents
11장 포인터

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Infinity(∞) Strategy

Microsoft PowerPoint - chap11-포인터의활용.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열


3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

untitled

Microsoft PowerPoint - Chapter14_17.pptx

Microsoft PowerPoint - Lesson14.pptx

Microsoft PowerPoint - Lesson14.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap10-함수의활용.pptx

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

금오공대 컴퓨터공학전공 강의자료

PowerPoint 프레젠테이션

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint Template

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - 09_C_Language_Pointer_Advanced

설계란 무엇인가?

Microsoft PowerPoint - chap06-2pointer.ppt

ABC 6장

Microsoft PowerPoint - chap-11.pptx

PowerPoint 프레젠테이션

8장. 포인터

Microsoft PowerPoint - chap06-8 [호환 모드]

Lab 3. 실습문제 (Single linked list)_해답.hwp

Microsoft PowerPoint - chap06-8.ppt

Microsoft PowerPoint - chap06-5 [호환 모드]

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint - ch07 - 포인터 pm0415

untitled

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - Chapter_08.pptx

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

목차 배열의개요 배열사용하기 다차원배열 배열을이용한문자열다루기 실무응용예제 C 2

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

BMP 파일 처리

설계란 무엇인가?

C 프로그래밊 개요

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

OCW_C언어 기초

Microsoft PowerPoint - Chapter8.pptx

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

ch15

윤성우의 열혈 TCP/IP 소켓 프로그래밍

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

C 언어 프로그래밊 과제 풀이

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - chap03-변수와데이터형.pptx

슬라이드 1

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

OCW_C언어 기초


0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

C 언어와 프로그래밍 개요

Microsoft PowerPoint - 05-chap03-ArrayAndPointer.ppt

untitled

KNK_C_05_Pointers_Arrays_structures_summary_v02

PowerPoint 프레젠테이션

1장. 유닉스 시스템 프로그래밍 개요

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - C_9장 포인터 pptx

문서의 제목 나눔명조R, 40pt

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Microsoft PowerPoint - Chapter 6.ppt

PA for SWE2007

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

PA for SWE2007

PowerPoint Presentation

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - 2주_강의노트

C 프로그래밊 개요

Microsoft PowerPoint - chap01-C언어개요.pptx

6.1 Addresses and Pointers Recall memory concepts from Ch2 ch6_testbasicpointer.c int x1=1, x2=7; double distance; int *p; int q=8; p = &q; name addre

Microsoft PowerPoint - ch06 - 배열, 동적배열, 정렬 pm0200

歯7장.PDF

chap7.PDF

Transcription:

-Part3- 제 4 장동적메모리할당과가변인 자

학습목차 4.1 동적메모리할당

4.1 동적메모리할당

4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성

4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역 데이터영역 : 전역변수, 정적변수들이저장되는영역 힙영역 : 프로그램이실행되는동안동적으로메모리를할당할수있는영역

4.1 동적메모리할당 (2/6)---[4-1.c 실습 ] #include <stdio.h> int a=10; int main(void) { int num1=10, num2=20; static int s=20; // 전역변수 a 선언 // 지역변수 num1, num2 선언 // 정적변수 s 선언 printf(" 데이터출력 : %d %d %d %d \n", a, num1, num2, s); printf(" 코드영역 : %x %x \n", main, printf); // 함수이름 printf(" 스택영역 : %x %x \n", &num1, &num2); // 지역변수 printf(" 데이터영역 : %x %x \n", &a, &s); // 전역변수, 정적변수 } return 0;

4.1 동적메모리할당 (3/6) 동적메모리할당 힙영역에할당된다. 런타임중 ( 실행시간 ) 에이루어진다. 프로그래머가동적메모리할당을요구한다.

4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성

4.1 동적메모리할당 (4/6) 동적메모리할당이필요한이유 1. 선언된배열요소의수가사용된요소수보다많은경우 ( 메모리낭비 ) int array[5]; // 선언된배열요소수 : 5개 (20바이트) array[0]=10, array[1]=20, array[2]=30; // 사용된배열요소수 : 3개 (12바이트) 2. 선언된배열요소의수가사용된요소의수보다적은경우 ( 메모리부족 ) int array[2]; // 선언된배열요소수 : 2개 (8바이트) array[0]=10, array[1]=20, array[2]=30; // 사용된배열요소수 : 3개 (12바이트)

4.1 동적메모리할당 (5/6) 동적메모리할당이필요한이유 3. 배열선언시배열길이에변수를설정한경우에러발생 int a=5; int array[a] // 배열선언시배열 a 를배열길이로사용 void init(int a) { int array[a]; // 배열선언시함수의인자 ( 지역변수 ) a 를배열길이로사용 결롞 : 프로그래머가필요한메모리크기를예측할수없다. 따라서 동적메모리할당의필요하다.

4.1 동적메모리할당 (6/6) 동적메모리할당함수와해제함수 헤더파일 : stdlib.h 종류함수성공실패 메모리할당함수 메모리할당함수 메모리할당함수 메모리해제함수 #include <stdlib.h> void* malloc (size_t size) #include <stdlib.h> void* calloc (size_t num, size_t size) #include <stdlib.h> void* realloc (void* p, size_t size) #include <stdlib.h> void free (void* p) 할당된메모리의시작주소반환 할당된메모리의시작주소반환 재할당된메모리의시작주소반환 NULL 반환 NULL 반환 NULL 반환 할당된메모리해제 -

4.2 동적메모리할당함수, 해제함수그리고가변인자

4.2 동적메모리할당함수, 해제함 배울내용 수그리고가변인자 1 malloc( ) 함수와 free( ) 함수 2 calloc( ) 함수와 free( ) 함수 3 realloc( ) 함수와 free( ) 함수 4 가변인자

(1/22) malloc( ) 함수와 free( ) 함수 종류함수성공실패 메모리할당함수 void* malloc(size_t size); 할당된메모리의시작주소반환 NULL 반환 메모리해제함수 void free(void* p); 할당된메모리해제

(2/22) malloc(4) 함수를이용한동적메모리할당

(3/22) 할당된메모리의시작주소형변환 (int*)

(4/22) free( ) 함수를이용한동적메모리해제

(5/22) #include<stdio.h> #include<stdlib.h> int main(void) { int* p=null; 6행 p = (int*)malloc(4); [4-2.c 실습 ] if(p==null) printf(" 힙영역에동적메모리할당실패 \n"); 11행 15행 16행 } *p = 10; printf(" 주소 : %x \n", p); printf(" 값 : %d \n",*p); free(p); p = NULL; return 0;

(6/22) 동적메모리할당 ---[4-2.c 분석 ]

(7/22) [4-3.c 실습 ] #include<stdio.h> #include<stdlib.h> int main(void) { char* p1 = (char*)malloc(2); int* p2 = (int*)malloc(8); p1[0] = 'A'; // *(p1+0) = 'A'; p1[1] = 'B'; // *(p1+1) = 'B'; p2[0] = 10; // *(p2+0) = 10; p2[1] = 20; // *(p2+1) = 20; printf(" 주소 : %x %x %x %x \n", &p1[0], &p1[1], &p2[0], &p2[1]); printf(" 값 : %d %d %d %d \n", p1[0], p1[1], p2[0], p2[1]); free(p1); p1 = NULL; } free(p2); p2 = NULL; return 0;

4.2 동적메모리할당함수, 해제함 수그리고가변인자 배울내용 1 malloc( ) 함수와 free( ) 함수 2 calloc( ) 함수와 free( ) 함수 3 realloc( ) 함수와 free( ) 함수 4 가변인자

(8/22) calloc( ) 함수를이용한동적메모리할당 종류함수반환값 메모리할당함수 void* calloc(size_t num, size_t size); 성공 : 할당된메모리의시작주소반환실패 : NULL 반환 calloc( ) 함수와 malloc( ) 함수와의차이

(9/22) [4-4.c 실습 ] #include <stdio.h> #include <stdlib.h> int main(void) { int i=0; int* p=(int*)calloc(sizeof(int), sizeof(int)); if(p==null) printf(" 힙영역에동적메모리할당실패 \n"); for(i=0; i<4; i++) { p[i]=i; // *(p+i)=i; printf(" 주소 : %x \n", &p[i]); printf(" 값 : %d \n", p[i]); } free(p); p=null; } return 0;

(10/22) #include <stdio.h> #include <stdlib.h> int main(void) { int* p1=( int*) calloc(1, sizeof(int)); int* p2=(int*) malloc(4); [4-5.c 실습 ] printf("p1 값 : %d \n", *p1); printf("p2 값 : %d \n", *p2); free(p1); p1=null; free(p2); p2=null; } return 0;

4.2 동적메모리할당함수, 해제함 수그리고가변인자 배울내용 1 malloc( ) 함수와 free( ) 함수 2 calloc( ) 함수와 free( ) 함수 3 realloc( ) 함수와 free( ) 함수 4 가변인자

(11/22) realloc() 함수를이용한동적메모리재할당 malloc( ), calloc( ) 함수는동적메모리를할당후메모리변경불가 realloc( ) 함수로해결 종류함수반환값성공 : 재할당된메모리의메모리할당함수 void* realloc(void* p, size_t size); 시작주소반환실패 : NULL 반환

(12/22) #include <stdio.h> #include <stdlib.h> int main(void) { int i=0; int* p=(int*) malloc(sizeof(int)*2); p[0]=10; p[1]=20; p=(int*) realloc(p, sizeof(int)*4); p[2]=30; p[3]=40; for(i=0; i<4; i++) printf("p[%d] : %d \n", i, p[i]); [4-6.c 실습 ] } free(p); p=null; return 0;

(13/22) [4-7.c 실습 ] #include <stdio.h> #include <stdlib.h> int main(void) { int i=0; int* p=(int*) malloc(sizeof(int)*2); p[0]=10; p[1]=20; p=(int*) realloc(p, sizeof(int)*1); p[0]=30; for(i=0; i<2; i++) printf("p[%d] : %d \n", i, p[i]); } free(p); p=null; return 0;

(14/22) 메모리영역의특징 특징 코드, 스택, 데이터영역 힙영역 메모리할당 컴파일시간에할당 런타임시간 ( 실행시간 ) 에할당 메모리해제 자동해제 free() 함수로해제 메모리관리 컴파일러 프로그래머

4.2 동적메모리할당함수, 해제함 수그리고가변인자 배울내용 1 malloc( ) 함수와 free( ) 함수 2 calloc( ) 함수와 free( ) 함수 3 realloc( ) 함수와 free( ) 함수 4 가변인자

(15/22) 가변인자 함수의인자수를고정하지않는다. void add(int num, );

9 행 10 행 11 행 15 행 (16/22) [4-8.c 실습 ] #include <stdio.h> void add (int num,...); int main(void) { int a=10, b=20, c=30; // 가변인자함수선언 add(1, a); // 가변인자함수호출 1 add(2, a, b); // 가변인자함수호출 2 add(3, a, b, c); // 가변인자함수호출 3 return 0; } void add(int num,...) { int* p=null; p=&num+1; // 가변인자함수정의 } if(num==1) printf("%d \n", p[0]); else if (num==2) printf("%d \n", p[0]+p[1]); else printf("%d \n", p[0]+p[1]+p[2]); // 10 출력 // 30 출력 // 60 출력

(17/22) add(1, a) 함수의호출 add(2, a, b) 함수의호출

(18/22) add(3, a, b, c) 함수의호출

(19/22) num==1 인경우 [4-8.c 분석 ]

(20/22) num==2 인경우 [4-8.c 분석 ]

(21/22) [4-8.c 분석 ] num==3인경우