포인터는 포인터 변수에 특정 변수의 메모리 주소를 저장하는 방식으로 메모리를 사용하였다.
이번에는 비슷하지만 조금 다른 방법을 소개하겠다. 바로 malloc 함수를 사용하는 것이다.
malloc 함수 사용
malloc 함수는 #include <stdlib.h> 해더 파일 안에 들어 있으므로 사용 전에 반드시 #include <stdlib.h>를 입력해줘야 한다.
1) 메모리 할당
●사용법
포인터 = malloc(크기);
●메모리 할당 코드 예제
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int main()
{
int num = 20; // int형 변수 선언
int* numPtr1; // int형 포인터 선언
numPtr1 = # // num의 메모리 주소를 구하여 numPtr에 할당
int* numPtr2; // int형 포인터 선언
numPtr2 = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당
printf("%p\n", numPtr1); // 00DCFDA0: 변수 num의 메모리 주소 출력
// 컴퓨터마다, 실행할 때마다 달라짐
printf("%p\n", numPtr2); // 013756E0: 새로 할당된 메모리의 주소 출력
// 컴퓨터마다, 실행할 때마다 달라짐
free(numPtr2); // 동적으로 할당한 메모리 해제하기
return 0;
}
●주의점
*포인터 변수로 하는 메모리 사용과는 달리, malloc 함수를 이용한 메모리 사용은 반드시 메모리 해제를 해주어야 한다.
2) 메모리에 값 저장
●사용법
포인터 변수에서 하던 것과 비슷하니 , 코드 예제를 보면서 이해해보자.
●메모리에 값 저장 코드 예제
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수가 선언된 헤더 파일
int main()
{
int* numPtr2; // int형 포인터 선언
numPtr2 = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당
*numPtr2 = 15; //numPtr2의 주소를 역참조하고 거기에 15 값 넣기
printf("\nnumPtr2 메모리에 들어있는 값: %d\n", *numPtr2);
free(numPtr2); // 동적으로 할당한 메모리 해제하기
return 0;
}
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 23강) 배열 형태의 문자열에 입력하기(scanf/char) (0) | 2020.11.13 |
---|---|
C언어 22강) 동적메모리할당과 포인터변수를 통한 배열 (2) | 2020.11.12 |
C언어 20강)+이중포인터 (0) | 2020.11.07 |
C언어 20강) void 포인터 (0) | 2020.11.06 |
C언어 19강 ) 다양한 자료형의 포인터 (0) | 2020.11.06 |