프로그래밍/나의 디버깅 노트
[ps][c++] 지역변수에 의한 segmentation fault
miniOS
2021. 4. 28. 12:38
int main(){
int arr[1025][1025]={0,};
int d[1025][1025]={0,};
...
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
d[i][j]=10 // 상수대입
d[i][j]=d[i-1][j]+d[i][j-1]-d[i-1][j-1]+arr[i][j]; // dp연산
}
}
...
}
main함수에서 arr배열과 d배열을 모두 1025*1025*sizeof(int)의 크기로 선언을 한 뒤
두 배열에 모두 값을 할당할 때,
d[i][j]=10과 같이 상수를 대입했을 때에는 오류가 없었지만
d[i][j]=d[i-1][j]+d[i][j-1]-d[i-1][j-1]+arr[i][j]; 와 같이 dp연산을 했을 때에는 segmentation fault가 발생하였다.
d배열을 전역변수에 선언하고 dp연산을 했을 때에는 오류가 발생하지 않는것으로 보아서
이 상황에서 오류가 발생한 원인은 매우 큰 두개의 지역변수로 인해서 스택메모리가 초과하여 발생한 오류로 보인다.
앞으로는 매우 큰 배열변수를 선언할 때에는 전역변수에 선언하는게 나을 것 같다.