문제
이 코드가 왜 a SIGSEGV:
int main()
{
unsigned long toshuffle[9765625];
unsigned long i;
for (i=0; i< 1000; i++)
toshuffle[i]= i;
return 0;
}
포인터에게 감사하겠습니다. (말장난 의도 없음 :))
해결책
Malloc ()을 사용하여 많은 메모리를 얻으십시오. 당신은 스택이 넘쳐납니다.
unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));
물론 당신이 그것을 끝내면, 당신은 그것을 자유롭게해야합니다 ().
참고 : C ++에서는 포인터를 올바른 유형으로 시전해야합니다.
다른 팁
아마도 스택에 9765625 Long을 할당 할 수 없기 때문일 것입니다 (이 사이트는 무엇을 다시 호출합니까? :)). 사용 malloc()
대신에.
로부터 인력
- rlimit_stack
공정 스택의 최대 크기 (바이트). 이 한계에 도달하면 SIGSEGV 신호가 생성됩니다. 이 신호를 처리하려면 프로세스가 대체 신호 스택을 사용해야합니다 (SigaltStack(2)).
제휴하지 않습니다 StackOverflow