Mokwon Univ
semiproject - 중간발표
용학도리
2008. 8. 16. 16:24
1. 메모리할당에 관해서..

1) 정적할당
- 프로그램이 실행되기 이전에 이미 변수의 저장 공간을 할당하고 그 모듈이나 또는 프로그램이 종료되면 변수가 해제되는 방식
- 장점 : 사용방법간단
- 단점 : 메모리이 사용예측 부정확
- ex) int x=100;
2) 동적할당
- 프로그램 실행중에 필요한 메모리를 할당하는 방법
- 함수 malloc() 을 이용하여 메모리공간을 확보 (stdlib.h)
2. 동적 메모리 할당 함수
1) malloc() 함수
- 인자로 메모리 할당의 크기를 지정하고, 반환값으로 할당된 메모리의 시작주소를 반환
- ex) int *ptr;
ptr = (int *) malloc( sizeof(int));
*ptr = 10;
4byte공간을 확보하고 시작주소는 ptr이라는 포인터가 가리키고 있다
그리고 4byte공간에 10이라는 데이터를 넣음
2) free() 함수
- malloc() 함수 사용후 할당된공간은 프로그램이 끝나기 전에 항상 닫아줘야 한다, 쓰는 함수
- 이 함수는 인자로 해체할 메모리공간의 주소 값을 갖는 포인터를 이용하여 호출한다
- ex) free(ptr);
3) 메모리관련 함수 원형
메모리 |
함수원형 |
기능 |
메모리할당
(기본값 없음) |
void* malloc(size_t) |
인자만큼의 메모리 할당 후
기본 주소 반환 |
메모리할당
(기본값 0으로) |
void* calloc(size_t, size_t) |
뒤 인자만큼의 메모리 크기로 앞 인자수 만큼 할당 후 기본주소 반환 |
기존메모리변경
(이전값그대로) |
void* realloc(void*, size_t) |
앞 인자의 메모리를 뒤 인자크기로 변경후, 기본주소반환 |
메모리 해제 |
void free(void *) |
인자를 기본 주소로 갖는
메모리 해제 |
3. 자기참조 구조체
- 자기참조 구조체는 반드시 구조체의 멤버 변수 중의 하나가 자기 자신의 구조체 포인터 변수
- 동일 구조체의 표현을 여러 개 만들어 연결할 수 있는 기능 ( 연결 리스트의 기초)
1) 구조체타입선언
typedef struct work{
int id;
int age;
struct work *next;
}list; // 구조체 선언 typedef로 list로 선언해도 가능
2) 자료형 두개 선언
list *first = NULL;
list *second = NULL;
3) malloc() 함수 사용하여 메모리 저장공간을 동적으로 할당
first = (list *)malloc(sizeof(list));
second = (list *)malloc(sizeof(list));
4)구조체에 데이터 넣기
first->id = 100;
first->age = 25;
second->id = 101;
second->age = 24;
second->next = NULL;
* 구조체 포인터 변수 참조 연산자 "->"
(*first).id first->id 이거 두개가 같다
5)두개의 구조체 연결하기
first->next = second;
