C++

[C++] 스택 오버플로우

쿼카만지고싶어요 2024. 12. 18. 20:20

스택 오버플로우란

- 스택 오버플로우란 스택 메모리 영역이 초과되는 현상을 의미합니다. 스택은 OS마다 고정된 크기의 메모리가 할당됩니다. 할당된 메모리 보다 큰 메모리가 들어오면 스택영역에서 오버플로우가 발생하게 됩니다.

 

 

스택 오버플로우의 원인

 

1. 재귀함수가 너무 많이 호출될때

- 재귀함수를 너무 많이 호출하거나, 탈출 조건을 명시하지 않으면 스택 오버플로우가 발생합니다.

 

2. 지역변수가 클때

- int k[백만]인 지역변수가 있고 할당된 크기가 1MB면, 4MB의 메모리 공간이 필요함으로 오버플로우가 발생하게 됩니다.

 

3. 여러 함수를 순차적으로 실행하며 함수 호출이 깊어질때

 

 

스택 오버플로우의 증상

 

1. 프로그램 크래쉬 - 프로그램이 갑자기 종료됩니다.

 

2. Segmentation Fault - 잘못된 메모리 접근으로 프로그램이 중단됩니다.

 

3. Access Violation - 잘못된 메모리 위치에 접근할때 발생하는 오류입니다. 해당 오류가 발생합니다.

 

 

스택 오버플로우의 방지

 

1. 재귀함수 사용할때 호출 너무 많지 않게 탈출 조건 잘 걸어두기

 

2. 너무 큰 지역변수면 힙 메모리 공간에 할당 후 사용하기

 

3. 꼭 많은 스택 메모리를 사용해야 하면 수동으로 스택 메모리 설정하기