Domanda

Perché questo codice sta generando un SIGSEGV :

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

    unsigned long i;

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

    return 0;
}

I puntatori saranno apprezzati. (No Pun previsto :))

È stato utile?

Soluzione

Usa malloc () per ottenere tanta memoria. Stai traboccando la pila.

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

Ovviamente quando hai finito, dovrai liberarlo ().

NOTA: in C ++, è necessario eseguire il cast del puntatore sul tipo corretto.

Altri suggerimenti

Probabilmente perché non puoi allocare 9765625 long sullo stack (come si chiama di nuovo questo sito? :)). Usa invece malloc () .

Dalla manpage

  • RLIMIT_STACK

La dimensione massima dello stack del processo, in byte. Al raggiungimento di questo limite, viene generato un segnale SIGSEGV. Per gestire questo segnale, un processo deve impiegare uno stack di segnali alternativo ( sigaltstack (2) ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top