프로그래밍 언어/C
C언어 33강) 함수에서 포인터 반환하기
happy_life
2020. 11. 20. 21:38
함수 return 값으로 지금까지 1 , 3.3 등의 값을 가져왔다. 그렇다면 포인터(메모리 주소)를 return 하려면 어떻게 해야 할까?
●포인터 반환 함수 문법
반환값자료형 *함수이름()
{
return 반환값;
}
코드 예시를 보자
●포인터 반환 함수 코드 예제
#include <stdio.h>
int *five() // int 포인터를 반환하는 five 함수 정의
{
int num = 5; // num은 함수 five 함수가 끝나면 사라짐
return # // 함수에서 지역 변수의 주소를 반환하는 것은 잘못된 방법
}
int main()
{
int *numPtr; //포인터 변수 선언
numPtr = five(); // 함수를 호출하고 반환값을 numPtr에 저장
printf("%d\n", *numPtr); // 역참조를 하려 하지만, 지역변수의 주소를 참조할 수 없음
return 0;
}
num 은 five 함수 안에서만 사용할 수 있는 지역변수이고 따라서 함수가 끝나면 사라진다. 그래서 num의 주소를 반환하는 것은 잘못되었다.
▲위의 문제를 해결하기 위해서는 malloc 함수로 메모리를 할당한 뒤 return 해줘야 한다.
●malloc 함수로 메모리를 할당하여 return 하는 코드 예제
#include <stdio.h>
#include <stdlib.h> //malloc, free 함수 선언된 헤더 파일
int *five() // int 포인터를 반환하는 five 함수 정의
{
int *numPtr1 = malloc(sizeof(int)); // int 크기만큼의 동적 메모리 할당
*numPtr1 = 5; //역참조로 5 저장
// 동적 메모리를 할당해주면 함수가 끝나도 사라지지 않음
return numPtr1; // 5의 메모리 주소 return
}
int main()
{
int *numPtr; //포인터 변수 선언
numPtr = five(); // 함수를 호출하고 반환값을 numPtr에 저장
printf("%d\n", *numPtr); // 5:메모리 해제 전까진 값 O
free(numPtr); //다른 함수에서 할당한 메모리여도 반드시 해제 필수
//동적 메모리는 함수를 벗어나도 유지되므로 해제 안하면 메모리 누수 발생
return 0;
}
C언어 21강) malloc함수로 메모리 사용하기
포인터는 포인터 변수에 특정 변수의 메모리 주소를 저장하는 방식으로 메모리를 사용하였다. 이번에는 비슷하지만 조금 다른 방법을 소개하겠다. 바로 malloc 함수를 사용하는 것이다. malloc 함
abcdefgh123123.tistory.com