문제

이 코드가 왜 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)).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top