2 votes

J'ai eu un segfault sur un macbook pro avec un tableau indexé de 24+bits

J'utilise GCC + le terminal pour créer un tableau de nombres premiers.

J'ai déjà posé la question sur #C@irc.freenode.net, mais je ne comprends toujours pas :

Un int peut stocker des valeurs sur 32 bits (donc un total de 2^32 valeurs uniques), mais un tableau ne peut-il pas avoir plus de 2^24 valeurs ?

Je n'en suis pas sûr, mais est-ce que Pourquoi des registres de 24 bits ? a déjà répondu à ma question ?

Cela signifie-t-il que le fait de créer un tableau de long int ne résout pas le problème ? Existe-t-il un moyen (proportionnellement rapide) de contourner ce problème, comme l'utilisation d'un int[][] pour stocker ces numéros ? Ou peut-être un include ou une librairie pour utiliser un nombre arbitraire d'octets pour stocker les nombres ?

    int main()  
    {  
        int array1[160000];  
        printf("first array declared fine.\n");  
        int array2[170000];  

        int array3[1600000];  
        printf("first array declared fine.\n");  
        int array4[1700000];  

        int array5[16000000];  
        printf("first array declared fine.\n");  
        int array6[17000000];  
    }

5voto

Job Points 8339

Puisque vous créez vos tableaux sur la pile, je suppose que votre erreur de segmentation est due à un débordement de la pile. Je suggérerais de créer ces grands tableaux sur le tas, comme ceci :

int* array = malloc(17000000 * sizeof(int));

La raison pour laquelle vous obtenez une erreur de segmentation n'a donc rien à voir avec l'utilisation d'index plus grands que 2^24, mais avec le fait que la taille de tous vos tableaux combinés est plus grande que la taille de la pile, ce qui provoque un débordement de la pile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X