Forum Programmation.c comportement 'aléatoire'

Posté par  .
Étiquettes : aucune
0
20
jan.
2007
Bonjour,

je ne comprend pas pourquoi le programme ci-dessous se termine parfois correctement, parfois avec une erreur de segmentation (core dumped).

int main()
{
double tab[1047575];
tab[0] = 0;
return 0;
}


Quelqu'un pourrait-il m'expliquer d'où vient le problème ?
Y-aurait-il une limitation de la taille des tableaux (8 Mo ?) ?

Merci d'avance
  • # mauvaise section

    Posté par  . Évalué à 1.

    oups, j'ai posté dans la mauvaise section (devrait etre dans programmation / C).
  • # Taille de pile

    Posté par  . Évalué à 2.

    Ce ne serait pas un problème de taille de pile ?
    http://www.squalenet.net/fr/ti/tutorial_c/15-allocation-dyna(...)

    Pour une telle taille, il vaut mieux faire une allocation dynamique avec malloc (en C) ou new (en C++) et ne pas oublier évidemment de désallouer, plutôt que par exemple vouloir changer la taille maximale de la pile par une directive de compilation.
    • [^] # Re: Taille de pile

      Posté par  . Évalué à 2.

      Merci, ça semble bien être un problème de taille de pile.
      J'ai trouvé quelques explications à cette adresse http://www.developpez.net/forums/archive/index.php/t-110796.(...)
    • [^] # Re: Taille de pile

      Posté par  (site web personnel) . Évalué à 3.

      Alternativement on peut déclarer le tableau static pour qu'il ne soit pas sur la pile tout en se passant de malloc(3).

      pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

      • [^] # Re: Taille de pile

        Posté par  . Évalué à 3.

        Le problème de static, c'est qu'on ne peut pas désallouer la mémoire occupée par le tableau en sortant de la fonction. Ici c'est dans maint(), donc c'est pas trop génant, mais ce n'est pas une habitude à prendre ...
        • [^] # Re: Taille de pile

          Posté par  . Évalué à 1.

          Je ne vois pas en quoi le fait que la mémoire d'un objet static ne soit pas désallouée est un problème. C'est la définition même de static qui veut ça !

          Une variable locale statique peut être utile. Mais il faut savoir quand l'utiliser et quand ne pas l'utiliser...

          Si tu veux un problème lié aux variables statiques, il y en a un autre, plus grave : pas de pas de réentrance. I.e. pas de récursivité possible (tout du moins de manière "classique"), marche pas avec le multi-thread...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.