Почему SIGSEGV? - PullRequest
       18

Почему SIGSEGV?

3 голосов
/ 27 октября 2009

Почему этот код выдает SIGSEGV :

int main()
{
    unsigned long toshuffle[9765625];

    unsigned long i;

    for (i=0; i< 1000; i++)
        toshuffle[i]= i;

    return 0;
}

Указатели будут оценены. (Без Пан предназначено:))

Ответы [ 3 ]

16 голосов
/ 27 октября 2009

Используйте malloc (), чтобы получить столько памяти. Вы переполняете стек.

unsigned long *toshuffle = malloc(9765625 * sizeof(unsigned long));

Конечно, когда вы закончите с этим, вам нужно освободить () его.

ПРИМЕЧАНИЕ. В C ++ необходимо привести указатель к правильному типу.

9 голосов
/ 27 октября 2009

Возможно, потому что вы не можете выделить 9765625 длин в стеке (как этот сайт снова называется? :)). Вместо этого используйте malloc().

2 голосов
/ 27 октября 2009

Из справочной страницы

  • RLIMIT_STACK

Максимальный размер стека процесса в байтах. По достижении этого предела генерируется сигнал SIGSEGV. Для обработки этого сигнала процесс должен использовать альтернативный стек сигналов ( sigaltstack (2)).

...