스택 주소 반환

함수가 스택 저장소의 주소를 반환합니다.

설명

함수가 반환될 때 수명이 끝나는 지역 변수의 주소나 참조를 반환하면, 호출자가 이미 무효화된 스택 메모리를 사용하게 됩니다.

잠재적 영향

  • 반환된 포인터를 역참조할 때 크래시 또는 정의되지 않은 동작이 발생할 수 있습니다.
  • 스택 재사용으로 인해 민감하거나 잘못된 데이터가 노출될 수 있습니다.

해결 방법

  1. 지역 변수의 주소나 참조를 반환하지 않습니다.
  2. 값 자체를 반환하거나, 호출자가 제공한 출력 버퍼를 사용합니다.
  3. 동적 할당이 필요한 경우 소유권 이전 규칙을 명확히 하고 해제 책임을 문서화합니다.

예시

변경 전

c
int *make_value(void) {
    int value = 42;
    return &value;
}

변경 후

c
int make_value(void) {
    int value = 42;
    return value;
}

설명:

  • 변경 전: value는 함수가 반환되면 수명이 끝나므로 반환된 주소는 무효입니다.
  • 변경 후: 값 복사를 반환하여 스택 주소가 외부로 노출되지 않습니다.

참조