Search
Duplicate

포인터를 활용한 메모리 생성과 해제

Created
2021/11/18 08:53
Tags

임의의 메모리 할당 함수 malloc

void *malloc(size_t size);
m = 메모리 / alloc = 할당
size : 할당할 바이트, 'size _t == unsigned int'
할당할 메모리 공간이 부족하면 NULL, 0 '\0' 리턴
할당한 메모리의 첫번 째 주소를 리턴
리턴형이 void * 이므로 형 변환을 통해 메모리 주소를 받아야 함

포인터의 메모리 할당과 해제

임의의 메모리 해제 free 함수
void free(void *memblock);
memblock : 해제할 메모리 주소
malloc(), free() 포함 헤더
stdlib.h 또는 malloc.h
메모리 계산 키워드 sizeof
데이터 형, 변수, 배열의 메모리 크기를 바이트 단위로 알려주는 키워드
형식
sizeof(변수 또는 데이터 형), sizeof 변수
sizeof(int), sizeof(변수명), sizeof(배열명)

sizeof를 사용한 메모리 할당과 scanf 사용 예

#include <stdio.h> #include <stdlib.h> int main(void){ int *ptr; ptr = (int*)malloc(sizeof(int)*3); ptr[0] = 1; ptr[1] = 2; ptr[2] = 3; printf("%d %d %d\n", ptr[0], ptr[1], ptr[2]); printf("input : "); scanf("%d %d %d", &ptr[0], &ptr[1], &ptr[2]); printf("%d %d %d", ptr[0], ptr[1], ptr[2]); free(ptr); return 0; }
C
복사

포인터를 함수의 매개변수로 사용하는 예

함수의 매개변수로 전달된 값을 함수 안에서 수정할 필요가 있을 때
int function(int *ptr) int main(void){ int var=7; function(&var); return 0; }
C
복사

변수를 함수로 전달하는 경우

void add(int *ptr){ // int *ptr == int ptr[] 과 같다고 생각할 수 있다 *ptr = *ptr + 1; } int main(void){ int var = 12; add(&var); printf("%d\n", var); return 0; }
C
복사

배열을 함수로 전달하는 경우

#include <stdio.h> void add(int *ptr, int count){ int i; for(i = 0; i < count; i++){ ptr[i] = ptr[i] +1; } } int main(void){ int array[] = {1, 2, 3, 4, 5}; int count = sizeof(array) / sizeof(array[0]); int i; add(array, count); for(i = 0; i < count; i++){ printf("%d", array[i]); } putchar('\n'); return 0; }
C
복사
포인터 자체로는 배열의 개수를 알 수 없다.
→ 외부에서 개수 입력 받음