Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dépassement de memoire tampon - pour type int

    14 juin 2019 à 19:59:19

    Bonjour,

    c'est la premiere fois que je vais sur un forum en tant que demandeur d'aide..

    Alors voila ce qui m'amène :

    Je suis en train de construire un générateur de page web en C (pour l'instant seulement pour générer du HTML)

    mon programme fait 2000 lignes pour l'instant alors que je n'en suis qu'au debut de mon tableau de bord et c'est justement ma procedure tableauDeBord(...) qui me pose problème car j'ai une exception qui se lève à chaque fois que je vais dans le tableau de bord, que j'appelle une procedure qui me construit la premiere couche (que ce soit header, main,nav,ou footer), que je reviens sur le tableau de bord (TDB) et que je me deconnecte du projet (retour procedure parent+3) ou que je retourne dans la procedure parent (+2) qui s'appelle instancePage  (qui propose de (4 fonctions): créer une page puis emmène sur le TDB, reprendre une page pour m'emmener sur le TDB, supprimer page (ok) et renommer page(ok) )

    c'est la reponse utilisateur dans le TDB qui est corrompue.

    je l'ai changé pour un type char rep1[2]; mais ca me marque le meme type d'erreur...

    ah oui j'utilise ma variable comme indice dans deux tabs, je ne pense pas que ca joue mais bon...

    Voila je ne sais pas vraiment quoi faire ca fait plus d'une semaine que je coince sur le problème, si vous avez des pistes, elles sont la bienvenues !

    ps voici le code de ma procedure:

    void tableauDeBord(TProjet *projet, TPage *page, char *title, bool *deco, int *rep1)
    {
        //char rep1[2];
        int rep;
        char tab[4][DMAX];
        char *t[8] = { "<header>", "</header>", "<nav>", "</nav>", "<main>", "</main>", "<footer>", "</footer>" };
        char ch[9];
        int indDep, indFin,indD,indF;
        int i,j;
        do
        {
            fflush(stdin);
            //strcpy(rep1, "");
           
            //printf("nom page: %s|\n", page->nom);
            printf("\n\n\n\n\n\n\t\tTableau de bord de la page : %s\n\n", page->nom);
            printf("1 - Construire/modifier le header\n");
            printf("2 - Construire/modifier le nav\n");
            printf("3 - Construire/modifier le main\n");
            printf("4 - Construire/modifier le footer\n");
            printf("5 - Modifier titre de l'onglet\n");
            printf("6 - Changer de page\n");
            printf("0 - d%cconnexion\n", 130);
            //gets(rep1);
            scanf("%d", rep1); fflush(stdin);
            rep = *rep1;
            if (*rep1 == 0) //(!strncmp(rep1,"0",1))
                *deco = true;
            else if ((*rep1>0)&&(*rep1<=4)) //((rep1[0] > '0') && (rep1[0] <= '4'))
            {
               
                trouveSeq(t[2* /*atoi*/ (*rep1)-2], page->contenu, &indDep, &indFin);
                indD = indDep;
                trouveSeq(t[(2 * /*atoi*/(*rep1) - 2) + 1], page->contenu, &indDep, &indFin);
                indF = indFin;
                j = 0;
                if (indF != -1)
                {
                    for (i = indD; i <= indF; i++)
                    {
                        tab[/*atoi*/(*rep1) - 1][j] = page->contenu[i];
                        j++;
                    }
                    tab[/*atoi*/(*rep1) - 1][j] = '\0';
                }
                strcpy(ch, t[2 * /*atoi*/(*rep1) - 2]);
               
                ConsPart(tab[/*atoi*/(rep) - 1], copie(ch, 1, (int)strlen(ch) - 2));
               
            }
            else if (*rep1==6)//(!strncmp(rep1,"6",1))
                *deco = false;
            else if (*rep1 == 5) // (!strncmp(rep1, "5", 1))
            {
    
            }
            printf("rep1:%d\n", *rep1);
        } while ((*rep1!=0)&&(*rep1 != 6)); //((rep1[0] != '0')&&(rep1[0] != '6'));
        //printf("rep:%d\n", rep);
        // enregistrer les parties a la suite dans page->contenu
    
    
    
    }



    -
    Edité par yohanesitruk 14 juin 2019 à 20:05:24

    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2019 à 20:19:16

      Désolé, J'ai dit une bétise !

      -
      Edité par rouloude 14 juin 2019 à 20:19:59

      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2019 à 21:25:24

        Désolé, je viens de trouver la solution.

        C'est en fait un dépassement de mémoire global, il faut checker au niveau des différents tabs du programme, moi c'était dans mes structures j'avais TProjet qui contenait un tab de 100 pages de type TPage qui elle a un tableau 'contenu' qui a une taille max de 1000 donc 100*1000 ça passe pas... 

        -
        Edité par yohanesitruk 14 juin 2019 à 21:26:41

        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2019 à 23:46:37

          Bonjour,

          Sujet résolu

          Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2019 à 17:19:04

            yohanesitruk a écrit:

            Désolé, je viens de trouver la solution.

            C'est en fait un dépassement de mémoire global, il faut checker au niveau des différents tabs du programme, moi c'était dans mes structures j'avais TProjet qui contenait un tab de 100 pages de type TPage qui elle a un tableau 'contenu' qui a une taille max de 1000 donc 100*1000 ça passe pas... 

            -
            Edité par yohanesitruk il y a environ 19 heures


            Tu parles de débordement, ou bien de limite de mémoire ?

            Si c'est débordement, c'est par exemple que tu as fait un tableau de 100 cases, et que tu essaies d'accéder à la 150 eme.... -> débordement.

            Limite : si tu as un tableau de 100*1000, ça fait 100 000. Mais 100 000 quoi ? Des int ? Une structure complexe ? Quelle taille ?

            Il faut savoir que la limite sur la pile est d'environ 2 Mo : c'est à dire :

            int fonction()
            {
               int tab[1000000];   // sur la pile, 1 million (~ 4 Mo), trop lourd
            
            }

            Les variables locales sont empilées sur la pile, donc ce code risque de ne pas marcher.

            Par contre, sur le tas, la tu peux y aller !

            int fonction()
            {
               int* tab = malloc(1000000000);  // 1 milliard ~ 4 Go, aucun soucis !
            
            
               free(tab);
            }

            Aucun soucis ! (compilation 64 bits au dela de 2 Go, et PC avec la RAM qu'il faut...)


            -
            Edité par Fvirtman 15 juin 2019 à 17:19:59

            • Partager sur Facebook
            • Partager sur Twitter

            Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            Dépassement de memoire tampon - pour type int

            × 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