Question

Pourquoi ce code génère-t-il un SIGSEGV :

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

    unsigned long i;

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

    return 0;
}

Les pointeurs seront appréciés. (No Pun prévu:))

Était-ce utile?

La solution

Utilisez malloc () pour obtenir autant de mémoire. Vous débordez la pile.

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

Bien sûr, quand vous en aurez fini, vous devrez le libérer ().

REMARQUE: en C ++, vous devez convertir le pointeur sur le type approprié.

Autres conseils

Probablement parce que vous ne pouvez pas allouer 9765625 longs sur pile (comment ce site s'appelle-t-il encore? :)). Utilisez malloc () à la place.

Extrait de la page de manuel

  • RLIMIT_STACK

La taille maximale de la pile de processus, en octets. Lorsque cette limite est atteinte, un signal SIGSEGV est généré. Pour traiter ce signal, un processus doit employer une pile de signaux alternative ( sigaltstack ). ).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top