Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ 함수에서 로컬 배열을 반환하는 방법 완벽 가이드

C/C++에서 함수 내부에 선언된 로컬 배열(지역 배열)은 함수가 종료되는 순간 스택에서 해제되기 때문에, 그대로 반환하면 유효하지 않은 메모리를 가리키게 됩니다. 이 문제를 해결하는 대표적인 방법은 동적 할당(dynamic allocation)을 사용하는 것입니다.

아래는 동적으로 할당된 배열을 함수에서 반환하는 C++ 프로그램 예제입니다.

알고리즘

시작
   함수 Array()에서 로컬 배열을 반환하기 위해
   동적으로 할당된 배열(new 연산자)을 사용한다.
   배열의 요소들을 출력한다.
끝

예제 코드

#include <iostream>
using namespace std;
int* Array() {
   int* a = new int[100];
   a[0] = 7;
   a[1] = 6;
   a[2] = 4;
   a[3] = 5;
   return a;
}
int main() {
   int* p = Array();
   cout << "The elements are:" << p[0] << " " << p[1] << " " << p[2] << " " << p[3];
   return 0;
}

실행 결과

The elements are:7 6 4 5

코드 설명

Array() 함수 내부에서 new int[100]을 통해 힙(heap) 영역에 배열을 생성합니다. 힙에 할당된 메모리는 함수가 종료되어도 자동으로 해제되지 않으므로, 함수가 끝난 후에도 안전하게 포인터로 접근할 수 있습니다.

주의사항

  • 메모리 누수 방지: new로 할당한 배열은 사용이 끝나면 반드시 delete[] p;로 해제해야 합니다.
  • 대안 방법: 호출자가 배열을 인자로 전달받아 채우는 방식, static 배열 사용, 또는 C++에서는 std::vectorstd::array를 반환하는 것이 더 안전하고 권장되는 방법입니다.

동적 할당 방식은 간단하지만 메모리 관리 책임이 프로그래머에게 있으므로, 실무에서는 스마트 포인터(std::unique_ptr<int[]>)나 STL 컨테이너를 활용하는 것이 좋습니다.