C++에서 문제가 발생하지만 스택 오버플로 예외가 발생하며 그 이유를 알 수 없습니다. main 메소드는 problem28()을 호출하지만, 첫 번째 라인은 내 출력에 "check"를 출력해야하는데, 이것은 일어나지 않습니다. gridsize를 501 이하로 정의하면 잘 실행되지만 그 이상은 아무것도 아니며 스택 오버플로 예외가 발생합니다. 메서드 호출에서 스택 오버플로 예외가 throw되었습니다.
어떤 도움
주시면 감사하겠습니다.#define right 0
#define down 1
#define left 2
#define up 3
#define gridsize 1001
int* next(int row, int col, int dir) {
int* newPos = new int[2];
newPos[0] = row;
newPos[1] = col;
switch(dir) {
case right:
newPos[1] += 1;
break;
case down:
newPos[0] += 1;
break;
case left:
newPos[1] -= 1;
break;
case up:
newPos[0] -= 1;
break;
}
return newPos;
}
int problem28() {
cout << "check" << endl;
int grid[gridsize][gridsize];
for (int i = 0; i < gridsize; i++)
for (int j = 0; j < gridsize; j++)
grid[i][j] = 0;
int* pos = new int[2];
pos[0] = pos[1] = gridsize/2;
int dir = right;
for (int i = 1; i <= 1001; i++) {
grid[pos[0]][pos[1]] = i;
pos = next(pos[0], pos[1], dir);
int* npos;
npos = next(pos[0], pos[1], (dir + 1) % 4);
if (grid[npos[0]][npos[1]] == 0)
dir = (dir + 1) % 4;
}
cout << "generated grid" << endl;
int total = 0;
for (int i = 0; i < gridsize; i++) {
total += grid[i][i];
total += grid[i][gridsize - i - 1];
}
total -= grid[gridsize/2][gridsize/2];
return 0;
}
int main() {
problem28();
system("pause");
return EXIT_SUCCESS;
}
의 #pragma 주석 감지 할 수있는 Linux의
(링커, "/ STACK : 16777216")이 당신에게 스택 –