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
}
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...
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...)
× 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.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html