Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème int/char

Sujet résolu
    12 novembre 2007 à 18:56:31

    BOnjour a tous !!

    j'ai un petit souci (gros en fait ^^) avec n prog en c++
    lorsque je l'exécute, la console plante...

    "console.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

    voici le code qui la fait planter :

    1. const int MAX=1000;
    2. int main()
    3. {
    4.     int img[MAX][MAX];
    5. }


    un truc bizzare c'ets que si je met ca ca fonctionne !!! :

    1. const int MAX=1000;
    2. int main()
    3. {
    4.     char img[MAX][MAX];
    5. }


    sachant que c'ets un travail pour mes études et que je suis obligé d'utiliser un tableau d'entiers je sais pas quoi faire...
    j'utilise code-blocks sous windows et j'ai jamais rencontré ce problème auparavant :s pourriez vous m'aider ?

    Merci ;-)
    • Partager sur Facebook
    • Partager sur Twitter
      12 novembre 2007 à 19:28:14

      Salut à toi,

      je pense que c'est un problème de dépassement de mémoire (ça fonctionne avec char car il ne prend qu'un octet, alors que le int en prend 4). Essayer de réduire un peu la taille et ça devrait passer.

      PS : Certains compilateurs n'accepteront pas ta variable MAX pour donner la taille du tableau, même si elle est constante, il vaudrait mieux utiliser un #define ;)
      • Partager sur Facebook
      • Partager sur Twitter
        12 novembre 2007 à 19:47:19

        Citation : MythTitans

        PS : Certains compilateurs n'accepteront pas ta variable MAX pour donner la taille du tableau, même si elle est constante, il vaudrait mieux utiliser un #define ;)



        hum non! pas de #define pour les constante en C++!!!

        certains compilos ne prendrons pas MAX comme nom qualifié car c'est déjà utiliser par un #define alors si tu la "redefine" (quelle francisation) tu pers son but précédent.

        Alors utilise un autre nom mais continu d'utiliser les constantes qui elles n'empêchent pas l'utilisation du même nom à l'extérieur de son champ d'action.
        • Partager sur Facebook
        • Partager sur Twitter
          12 novembre 2007 à 19:52:32

          int img[MAX][MAX];

          1000*1000*8 octets en mémoire demandés = 7.6 Mo demandés en contigu. Ca commence à faire beacoup ;)
          • Partager sur Facebook
          • Partager sur Twitter
            12 novembre 2007 à 19:57:26

            Citation : MatteX

            certains compilos ne prendrons pas MAX comme nom qualifié car c'est déjà utiliser par un #define alors si tu la "redefine" (quelle francisation) tu pers son but précédent.

            Alors utilise un autre nom mais continu d'utiliser les constantes qui elles n'empêchent pas l'utilisation du même nom à l'extérieur de son champ d'action.



            Perso avec Visual C++ quand j'utilise une constante pour la taille d'un tableau il me dit que la taille est inconnue, alors que la variable de taille est déclarée et initialisée avant la déclaration du tableau, je suis toujours obligé d'utiliser un #define.
            • Partager sur Facebook
            • Partager sur Twitter
              12 novembre 2007 à 20:10:03

              Citation : MythTitans

              Citation : MatteX

              certains compilos ne prendrons pas MAX comme nom qualifié car c'est déjà utiliser par un #define alors si tu la "redefine" (quelle francisation) tu pers son but précédent.

              Alors utilise un autre nom mais continu d'utiliser les constantes qui elles n'empêchent pas l'utilisation du même nom à l'extérieur de son champ d'action.



              Perso avec Visual C++ quand j'utilise une constante pour la taille d'un tableau il me dit que la taille est inconnue, alors que la variable de taille est déclarée et initialisée avant la déclaration du tableau, je suis toujours obligé d'utiliser un #define.



              Tu as la version 5? car j'utilise Visual C++ depuis la version 6 et cela à toujours fonctionné. Surtout que c'est dans la norme C++! Montre-moi un exemple qui ne fonctionnera pas chez moi.
              • Partager sur Facebook
              • Partager sur Twitter
                12 novembre 2007 à 20:26:32

                Ah non, j'ai compris ! J'avais laissé le mode de compilation en debug, d'où les erreurs, autant pour moi ^^. Tu as donc raison, il vaut mieu utiliser les constantes.
                • Partager sur Facebook
                • Partager sur Twitter
                  12 novembre 2007 à 21:39:54

                  il me semble que l'on peut mettre 1 Mo dans la pile (statique), il faut donc mettre sur la file(ca arrive a tout le monde de se tromper) tas (dynamique)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 novembre 2007 à 22:20:22

                    :) on dit allocation statique sur la pile(stack) et allocation dynamique sur le tas(heap)

                    Petite bulle de vocabulaire informatique ;)

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 novembre 2007 à 23:01:00

                      merci beaucoup de vos réponses ;-)

                      effectivement lorsque je met la constate MAX a 100 ca fonctionne tandis qu'a 1000 ca bug :D
                      je vais donc pour mes tests la mettre a 100 et je rendrai la copie de mon travail avec 1000 alors :)

                      de toute facon il ne fait que lire la copie, il n'exécute pas mon code ;-)

                      merci bcp tout le monde
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 novembre 2007 à 22:11:33

                        ok ok... mémoire automatique
                        • Partager sur Facebook
                        • Partager sur Twitter
                          14 novembre 2007 à 15:00:15

                          Voila ce que nos professeurs nous ont envoyés sur les valves électronique ;-)
                          ca résout le problème :

                          Citation : Profs


                          INFO-F-101 - Programmation

                          Certains étudiants qui travaillent sous Windows nous ont signalé des difficultés rencontrées dans la réalisation de leur projet 4. En effet, la déclaration d'une matrice de taille 1000x1000 cause systématiquement une erreur de segmentation (segmentation fault).
                          Il semble que ce problème soit posé par une taille de stack trop petite qui empêche de déclarer de grandes matrices à l'intérieur d'une fonction.

                          Une manière de contourner ce problème consiste à déclarer comme variables globales les matrices qui contiendront les données.
                          Par exemple:

                          #include
                          using namespace std ;

                          const int N=1000 ;

                          int M[N][N], R[N][N] ; // matrices déclarées globales

                          int main() {
                          // les matrices ne sont pas déclarées dans le main
                          int l, h ;
                          chargerImage("hippo.pgm", l, h, M) ;
                          symetrie(M, l, h, R) ;
                          ecrireImage("hipposym.pgm", l, h, R) ;

                          }

                          Attention, ce type d'erreur peut aussi être causé par un dépassement du tableau (indice qui sort du tableau). Il importe donc de bien vérifier votre code !

                          A notre connaissance, ce problème n'apparaît pas sous Linux ni sous Mac OS. Les étudiants qui ont compilé leur code posant problème sous Windows ont vu le problème disparaître une fois sous Linux.

                          Bon travail.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Problème int/char

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown