C 언어에서 자동 저장 영역 (auto, 기본값) 변수는 가시성 영역에 들어갈 때 (일반적으로 함수) 스택에 생성되며, 해당 영역을 벗어날 때 자동으로 파괴됩니다.
특징은 다음과 같습니다:
올바른 사용과 잘못된 사용 예:
int* wrong() { int x = 42; return &x; // 오류: x는 함수에서 벗어날 때 파괴됩니다. } void correct() { int y = 123; printf("%d\n", y); // 모두 정상 }
함수에서 지역 변수의 주소를 반환하면 어떻게 됩니까?
종종 잘못된 답변: "포인터가 값을 유지합니다."
올바른 답변: 반환된 주소는 함수가 종료된 후 무효화되고, 메모리 영역은 다른 자동 변수나 함수에 다시 할당됩니다. 그런 포인터 사용은 정의되지 않은 동작입니다.
예:
int* myfunc() { int temp = 10; return &temp; // temp는 반환 후 파괴됩니다. } int main() { int* p = myfunc(); printf("%d\n", *p); // 정의되지 않은 동작 }
이야기
이야기
이야기
의료 기록 장치의 펌웨어에서는 데이터 처리 속도를 높이기 위해 스택에 캐시를 구현했습니다. 부하가 걸릴 때 스택이 오버플로우되어 장치 재부팅과 환자 데이터 손실이 발생했습니다.