C 함수에서 배열 반환
C 함수에서 배열을 반환하는 경우 메모리 관리의 복잡성을 이해하는 것이 중요합니다. . 기본적으로 함수 내의 스택에 할당된 로컬 배열은 함수가 종료될 때 삭제됩니다. 이 동작은 함수 외부에서 이러한 배열에 액세스하려고 시도하는 경우 정의되지 않은 동작으로 이어집니다.
제공된 코드에서 배열 c는 uni 함수 내의 스택에 생성됩니다.
<code class="c++">int c[10];</code>
이 배열이 함수의 값으로 성공적으로 채워지더라도 함수가 반환되고 배열이 파괴되면 값이 손실됩니다. 이로 인해 예기치 않은 결과가 발생합니다.
이 문제를 극복하려면 두 가지 대안 접근 방식을 채택할 수 있습니다.
포인터 사용:
수정 할당된 배열에 대한 포인터를 반환하는 uni 함수:
<code class="c++">int* uni(int *a,int *b) { int* c = new int[10]; // Allocate array on heap int i = 0; // ...same code as before... return c; }</code>
메인에서는 힙에 할당된 메모리 할당을 해제해야 합니다.
<code class="c++">int main() { // ...same code as before... delete[] c; // Deallocate array from heap // ... }</code>
사용 a Struct:
또 다른 접근 방식은 구조체 내에서 배열을 래핑하고 구조체를 반환하는 것입니다.
<code class="c++">struct myArray { int array[10]; }; myArray uni(int *a,int *b) { myArray c; int i = 0; // ...same code as before... return c; }</code>
이 경우 구조체는 값으로 반환되어 다음의 복사본을 보장합니다. 배열은 main 함수에서 생성됩니다. 구조체의 값 의미로 인해 구조체 반환 값을 효율적으로 복사할 수 있습니다.
위 내용은 데이터 손실 없이 C의 함수에서 배열을 반환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!