배열 전달: 잠재적인 함정
C의 함수에서 배열을 반환하는 것은 간단해 보이지만 사용자 경험에서 알 수 있듯이 숨겨진 복잡성이 발생할 수 있습니다. 함수를 사용하여 두 배열의 음수가 아닌 숫자를 병합하려고 합니다.
사용자가 이를 생성한 함수 외부에서 병합된 배열에 액세스할 때 잘못된 출력을 관찰했습니다. 이는 함수 내에서 "int c[10]"으로 선언된 것과 같이 스택에 생성된 배열이 함수가 종료되면 소멸되기 때문입니다. 나중에 액세스하면 정의되지 않은 동작이 발생합니다.
이 문제를 해결하기 위한 한 가지 옵션은 로컬 배열을 배열이 포함된 구조체로 바꾸는 것입니다. 구조체가 반환되면 내부 배열이 호출 함수의 메모리에 복사되어 스택 파괴 문제를 효과적으로 방지합니다. 예는 다음과 같습니다.
<code class="cpp">struct myArray { int array[10]; }; myArray uni(int *a, int *b) { myArray c; // Same logic as before for merging arrays return c; }</code>
메인에서 반환된 구조체를 할당하고 내부 배열에 액세스할 수 있습니다.
<code class="cpp">myArray c = uni(a, b); for (int i = 0; i < 10; i++) { cout << c.array[i] << " "; }</code>
또 다른 해결 방법은 포인터를 사용하여 배열에 메모리를 할당하는 것입니다. "전달 포인터" 장에서 설명한 대로 동적으로. 그러나 이로 인해 메모리를 수동으로 관리하고 메모리 누수를 방지해야 할 필요성이 발생합니다.
접근 방식 선택은 특정 요구 사항에 따라 다르지만 함수에서 배열을 사용할 때는 이러한 함정을 이해하는 것이 중요합니다.
위 내용은 C의 함수에서 돌아온 후 병합된 배열이 사라지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!