IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

out of memory


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut out of memory
    salut a tous,je suis en train de taffer sur un projet en C plutot long,
    mon programme contient un switch avec 17 cases et lorsque je compile
    il me met "out of memory in function" alors qu a prioro il n y a aucune erreur

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mehdi.berra
    salut a tous,je suis en train de taffer sur un projet en C plutot long,
    mon programme contient un switch avec 17 cases et lorsque je compile
    il me met "out of memory in function" alors qu a prioro il n y a aucune erreur
    A la compilation ? Peut être un problème d'inclusion infinie...

    Montre le code ou donne un lien...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je regarde du coté des options du compilateur. Ton switch pose peut probleme, essaye de laisser un seul case dedans pour voir si cela vient de là.

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    montre ton code, ce n'est pas un message de compilateur courant...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut wesh wesh
    Effectivememnt, c'est un problème de switch parce quand j'en met qu'un seul ça marche mais une fois que le switch est rempli ça marche plus il me met le fameux message

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    voila le code,je n ai pas tout mis ,mais il y a encore bcp de switch:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    #include<stdio.h>
    #include<conio.h>
    #include <iostream.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <io.h>
    #include <dos.h>
    void menuprincipal();
    void curseur(int);
    void cadre(int,int,int,int,int,int,int,int,int);
    int saisie1();
    int saisie2();
    int saisie3();
    void aff4(int,int,int);
    void init(int,int,int,int);
    main()
    {  char x;
       int n1,n2,n3;
      do{
       clrscr();
       menuprincipal();
       n1=saisie1();n2=saisie2();n3=saisie3();
       aff4(n1,n2,n3);
     
     
    switch(n1)
    {
       case 0:{
    	     FILE *fichier;
    	     char problem[35]={'A','F','R','I','Q','U','I','A','\0'};
    	     char client[35];
    	     char gaz[35];
    	     char anne[35];
    	     char mois[35];
    	     char k;
    	     int a,b,c,d,e,f,g,h,i,j;
    	     char nomfich[6]={'n','a','d','o','r','\0'};
     
    	    gotoxy(6,4);printf("Centre:NADOR");
     
    			 fichier=fopen(nomfich,"r");
     
       do
           {
    fscanf(fichier,"%s",client);
    if (strcmp(problem,client)==0)
    {        flushall();
    	 fscanf(fichier,"%s",gaz);
     
    	 gotoxy(58,2);fscanf(fichier,"%s",anne);printf("     ");gotoxy(58,2);printf("%s",anne);
    	 gotoxy(13,2);fscanf(fichier,"%s",mois);printf("            ");gotoxy(13,2);printf("%s",mois);
    	 gotoxy(35,9);fscanf(fichier,"%d",&a);printf("   ");gotoxy(35,9);printf("%d",a);
    	 gotoxy(66,9);fscanf(fichier,"%d",&b);printf("   ");gotoxy(66,9);printf("%d",b);
    	 gotoxy(35,12);fscanf(fichier,"%d",&c);printf("   ");gotoxy(35,12);printf("%d",c);
    	 gotoxy(66,12);fscanf(fichier,"%d",&d);printf("   ");gotoxy(66,12);printf("%d",d);
    	 gotoxy(35,16);fscanf(fichier,"%d",&e);printf("   ");gotoxy(35,16);printf("%d",e);
    	 gotoxy(66,16);fscanf(fichier,"%d",&f);printf("   ");gotoxy(66,16);printf("%d",f);
    	 gotoxy(35,19);fscanf(fichier,"%d",&g);printf("   ");gotoxy(35,19);printf("%d",g);
    	 gotoxy(66,19);fscanf(fichier,"%d",&h);printf("   ");gotoxy(66,19);printf("%d",h);
    	 gotoxy(35,22);fscanf(fichier,"%d",&i);printf("   ");gotoxy(35,22);printf("%d",i);
    	 gotoxy(66,22);fscanf(fichier,"%d",&j);printf("   ");gotoxy(66,22);printf("%d",j);
    	 k=getch();
     
    }
     
     
    	}while((fgetc(fichier)!=EOF)&(k==13));
    	gotoxy(48,6);curseur(1);textcolor(27);cprintf("Retour menu/Sortir(R/S)?");
    	flushall();scanf("%c",&x);
    	break;
     
    }
      case 1:{
    	     FILE *fichier;
    	     char problem[35]={'A','T','L','A','S','\0'};
    	     char client[35];
    	     char gaz[35];
    	     char anne[35];
    	     char mois[35];
    	     char k;
    	     int a,b,c,d,e,f,g,h,i,j;
    	     char nomfich[6]={'n','a','d','o','r','\0'};
     
    	    gotoxy(6,4);printf("Centre:NADOR");
     
    			 fichier=fopen(nomfich,"r");
     
       do
           {
    fscanf(fichier,"%s",client);
    if (strcmp(problem,client)==0)
    {        flushall();
    	 fscanf(fichier,"%s",gaz);
     
    	 gotoxy(58,2);fscanf(fichier,"%s",anne);printf("     ");gotoxy(58,2);printf("%s",anne);
    	 gotoxy(13,2);fscanf(fichier,"%s",mois);printf("            ");gotoxy(13,2);printf("%s",mois);
    	 gotoxy(35,9);fscanf(fichier,"%d",&a);printf("   ");gotoxy(35,9);printf("%d",a);
    	 gotoxy(66,9);fscanf(fichier,"%d",&b);printf("   ");gotoxy(66,9);printf("%d",b);
    	 gotoxy(35,12);fscanf(fichier,"%d",&c);printf("   ");gotoxy(35,12);printf("%d",c);
    	 gotoxy(66,12);fscanf(fichier,"%d",&d);printf("   ");gotoxy(66,12);printf("%d",d);
    	 gotoxy(35,16);fscanf(fichier,"%d",&e);printf("   ");gotoxy(35,16);printf("%d",e);
    	 gotoxy(66,16);fscanf(fichier,"%d",&f);printf("   ");gotoxy(66,16);printf("%d",f);
    	 gotoxy(35,19);fscanf(fichier,"%d",&g);printf("   ");gotoxy(35,19);printf("%d",g);
    	 gotoxy(66,19);fscanf(fichier,"%d",&h);printf("   ");gotoxy(66,19);printf("%d",h);
    	 gotoxy(35,22);fscanf(fichier,"%d",&i);printf("   ");gotoxy(35,22);printf("%d",i);
    	 gotoxy(66,22);fscanf(fichier,"%d",&j);printf("   ");gotoxy(66,22);printf("%d",j);
    	 k=getch();
     
    }
     
     
    	}while((fgetc(fichier)!=EOF)&(k==13));
    	gotoxy(48,6);curseur(1);textcolor(27);cprintf("Retour menu/Sortir(R/S)?");
    	flushall();scanf("%c",&x);
    	break;
     
    }
      case 2:{
    	     FILE *fichier;
    	     char problem[35]={'B','U','T','S','I','R','\0'};
    	     char client[35];
    	     char gaz[35];
    	     char anne[35];
    	     char mois[35];
    	     char k;
    	     int a,b,c,d,e,f,g,h,i,j;
    	     char nomfich[6]={'n','a','d','o','r','\0'};
     
    	    gotoxy(6,4);printf("Centre:NADOR");
     
    			 fichier=fopen(nomfich,"r");
     
       do
           {
    fscanf(fichier,"%s",client);
    if (strcmp(problem,client)==0)
    {        flushall();
           /*	 fscanf(fichier,"%s",gaz);*/
     
    	 gotoxy(58,2);fscanf(fichier,"%s",anne);printf("     ");gotoxy(58,2);printf("%s",anne);
    	 gotoxy(13,2);fscanf(fichier,"%s",mois);printf("            ");gotoxy(13,2);printf("%s",mois);
    	 gotoxy(35,9);fscanf(fichier,"%d",&a);printf("   ");gotoxy(35,9);printf("%d",a);
    	 gotoxy(66,9);fscanf(fichier,"%d",&b);printf("   ");gotoxy(66,9);printf("%d",b);
    	 gotoxy(35,12);fscanf(fichier,"%d",&c);printf("   ");gotoxy(35,12);printf("%d",c);
    	 gotoxy(66,12);fscanf(fichier,"%d",&d);printf("   ");gotoxy(66,12);printf("%d",d);
    	 gotoxy(35,16);fscanf(fichier,"%d",&e);printf("   ");gotoxy(35,16);printf("%d",e);
    	 gotoxy(66,16);fscanf(fichier,"%d",&f);printf("   ");gotoxy(66,16);printf("%d",f);
    	 gotoxy(35,19);fscanf(fichier,"%d",&g);printf("   ");gotoxy(35,19);printf("%d",g);
    	 gotoxy(66,19);fscanf(fichier,"%d",&h);printf("   ");gotoxy(66,19);printf("%d",h);
    	 gotoxy(35,22);fscanf(fichier,"%d",&i);printf("   ");gotoxy(35,22);printf("%d",i);
    	 gotoxy(66,22);fscanf(fichier,"%d",&j);printf("   ");gotoxy(66,22);printf("%d",j);
    	 k=getch();
     
    }
     
     
    	}while((fgetc(fichier)!=EOF)&(k==13));
    	gotoxy(48,6);curseur(1);textcolor(27);cprintf("Retour menu/Sortir(R/S)?");
    	flushall();scanf("%c",&x);
    	break;
     
    }
      case 8:{
    	     FILE *fichier;
    	     char problem[35]={'N','A','D','I','\0'};
    	     char client[35];
    	     char gaz[35];
    	     char anne[35];
    	     char mois[35];
    	     char k;
    	     int a,b,c,d,e,f,g,h,i,j;
    	     char nomfich[6]={'n','a','d','o','r','\0'};
     
    	    gotoxy(6,4);printf("Centre:NADOR");
     
    			 fichier=fopen(nomfich,"r");
     
       do
           {
    fscanf(fichier,"%s",client);
    if (strcmp(problem,client)==0)
    {        flushall();
    	 fscanf(fichier,"%s",gaz);
     
    	 gotoxy(58,2);fscanf(fichier,"%s",anne);printf("     ");gotoxy(58,2);printf("%s",anne);
    	 gotoxy(13,2);fscanf(fichier,"%s",mois);printf("            ");gotoxy(13,2);printf("%s",mois);
    	 gotoxy(35,9);fscanf(fichier,"%d",&a);printf("   ");gotoxy(35,9);printf("%d",a);
    	 gotoxy(66,9);fscanf(fichier,"%d",&b);printf("   ");gotoxy(66,9);printf("%d",b);
    	 gotoxy(35,12);fscanf(fichier,"%d",&c);printf("   ");gotoxy(35,12);printf("%d",c);
    	 gotoxy(66,12);fscanf(fichier,"%d",&d);printf("   ");gotoxy(66,12);printf("%d",d);
    	 gotoxy(35,16);fscanf(fichier,"%d",&e);printf("   ");gotoxy(35,16);printf("%d",e);
    	 gotoxy(66,16);fscanf(fichier,"%d",&f);printf("   ");gotoxy(66,16);printf("%d",f);
    	 gotoxy(35,19);fscanf(fichier,"%d",&g);printf("   ");gotoxy(35,19);printf("%d",g);
    	 gotoxy(66,19);fscanf(fichier,"%d",&h);printf("   ");gotoxy(66,19);printf("%d",h);
    	 gotoxy(35,22);fscanf(fichier,"%d",&i);printf("   ");gotoxy(35,22);printf("%d",i);
    	 gotoxy(66,22);fscanf(fichier,"%d",&j);printf("   ");gotoxy(66,22);printf("%d",j);
    	 k=getch();
     
    }
     
     
    	}while((fgetc(fichier)!=EOF)&(k==13));
    	gotoxy(48,6);curseur(1);textcolor(27);cprintf("Retour menu/Sortir(R/S)?");
    	flushall();scanf("%c",&x);
    	break;
     
    }

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Au pire, tu peux toujours essayer en séparant tes sources...
    J'avais souvent ce problème avec le compilateur QuickC à une époque, et séparer davantage le code suffisait à le résoudre...


    Edit: Houlà, là, ça devient grave. Quelqu'un a un tutoriel ou une entrée de FAQ sur la compilation séparée ?
    Pour la grammaire, on verra plus tard.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Comment tu fais pour separer les sources?
    ca m arrangerais pas mal si tu pourrais m aider please

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par mehdi.berra
    Comment tu fais pour separer les sources?
    ca m arrangerais pas mal si tu pourrais m aider please
    C'est une question liée à la conception. On écrit pas du code au kilomètre.
    1. on spécifie
    2. on organise et on découpe
    3. on code selon le découpage

    Découper à postériori revient à refaire la conception (phase 2).

    Ceci peut aider

    http://emmanuel-delahaye.developpez.com/codage.htm
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut Rien
    Mon cher emmanuel, j ai compris ce que tu m'a dit mais malheuresement en allant dans le lien que tu m a donner,j ai constater que c etait trop compliquer car je ne suis qu un debutant,et je n ai pas encore fait tout ca.
    Par contre,j ai bien decouper mon programme,en fait j ai un peu respecter ce que tu ma dit,regarde bien le programme et tu le constatera.Bref,tu n aurais pas une autre solution,ce ne serait pas un probleme d'allocation de memoire????

  11. #11
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Déjà, tu devrais essayer d'utiliser des fonctions pour le code des case de ton switch, ça améliorerait la lisibilité.
    Je n'ai pas lu en détail tous les case, mais si tu as des morceaux de code semblables qui reviennent plusieurs fois, essaie d'en faire des fonctions.
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  12. #12
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut fonction
    Salut zorro,
    j ai deja essayer ce que tu m'a dit il y a une semaine mais ca ne donne rien
    en fait a la compilation il me met comme message:"fatal C:out of memory in function fichier" alors que je n ai meme pas de fonction fichier dans tout le programme,mais par contre j utilise un fichier,
    en gros je suis vraiment depasser....

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    OK, je vais me dévouer, mais je manque de matériel.

    La Compilation séparée est le fait de répartir le code sur plusieurs fichiers source C. Chaque fichier source est compilé séparément en un fichier objet (fichier.o pour GCC, fichier.obj pour QuickC et Visual), qui sont ensuite réunis dans l'étape d'édition de liens qui transforme un ensemble de fichiers objets en un programme exécutable.

    Le compilateur et l'éditeur de liens (ou linker) sont souvent deux programmes séparés. Pour GCC, le compilateur s'appelle je-ne-sais-comment, mais l'éditeur de liens est ld. Sous Visual, le compilateur est cl.exe et l'éditeur de liens link.exe.

    Tu dois trouver le compilateur et l'éditeur de liens de ton environnement (que tu n'as toujours pas précisé) et les exécuter séparément.
    Ou bien, si tu utilises un environnement de développement, tu peux certainement définir un fichier projet dans lequel inclure plusieurs fichiers source.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Bon, j'ai regardé ton code plus en détail, et sauf erreur de ma part, le code des case est identique, à part la définition de ta variable "problem".
    Ce que tu devrais faire, c'est mettre tout ce code dans une fonction, appeler cette fonction dans chacun des case de ton switch, en lui passant en paramètre la variable "problem".
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  15. #15
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut medinoc
    Meci Medinoc de te devouer

    MAIS le probleme,c est que ce que tu me dis,j ai l impression que c est du chinois!!!!!deja je ne travaille pas avec un orienter objet,je bosse avec borland C

    est ce que tu es sure que mon problem viens de la,ca ne peut pas etre autre chose,du genre allocation de la memoire???

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Un "fichier objet" n'a rien à voir avec l'"orienté objet".

    Un "fichier objet" est ce qui sort du compilateur. Et quant à savoir si la compilation séparée résoudra ou non ton problème, j'en sais f***** rien, je sais seulement que ça avait résolu les miens.

    Et la compilation séparée, n'importe qui sachant programmer en C devrait savoir ce que c'est sans que ce soit "du chinois". On ne fait pas de "projet en C plutot long" quand on ne sait pas ce que c'est...


    PS: J'apprécie moyennement qu'on me relance par MP alors que je visite déjà ces forums plus de temps que je le devrais. Ne recommence pas.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre habitué

    Inscrit en
    Janvier 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 188
    Points : 142
    Points
    142
    Par défaut
    t'as test une structure if, else if, else au lieu du switch ? on sait jamais :s

  18. #18
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut trop compliquer
    merci de vouloir ramislebob
    mais avec un if et else c est super super super long
    merci kan meme
    zorro a trouver la solution et pour lui rendre hommage,dans mon programme un efonction porte son nom: le grand zorro
    p.s: c est vrai en plus

  19. #19
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Et oui !
    Citation Envoyé par Henri Salvador
    Et, et, Zorro est arrivé
    Sans s'presser
    Le grand Zorro, le beau Zorro
    Avec son ch'val et son grand chapeau
    Enfin, moi c'est pas Zorro, mais Zooro, avec deux O !
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  20. #20
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 625
    Points : 30 674
    Points
    30 674
    Par défaut
    Salut,

    Je sais que je suis chiant sur le sujet, mais, si au moins ton code était déjà un tant soit peu correctement indenté, et que tu ne surchargeait pas inutilement ta fonction main(), ce serait franchement pas plus mal...

    Dans le meme ordre d'esprit, avoir une seule instruction par ligne facilite les choses également ...

    Les lignes du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gotoxy(66,22);fscanf(fichier,"%d",&j);printf("   ");gotoxy(66,22);printf("%d",j);
    seraient avantageusement remplacées par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    gotoxy(66,22);//[1]
    fscanf(fichier,"%d",&j);
    printf("   ");//[1]
    gotoxy(66,22);
    printf("%d",j);
    [1]au passage: Au passage, je ne comprend pas l'utilité de ces lignes:
    gotoxy(), quand il existe, place le curseur en position (ligne,colone)
    fscanf() lit dans un fichier mais n'affiche rien
    l'ajout de quelques espace ne change pas grand chose

    Quelques conseils en vrac pour te permette de t'améliorer:

    -Au delà de 3 ou quatre arguments à passer à une fonction, le risque d'erreur devient très important lors du passage des paramètres ... Alors, une fonction qui en demande 9 ...

    Ta fonction void cadre (int....int);
    serait astucieusement remplacée par une structure et l'appel de la fonction en fournissant cett structure sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    //la structure intéressante: 9 entiers avec un nom distinct
    typedef struct nineint
    {
        int a1;
        int a2;
        int a3;
        int a4;
        int a5;
        int a6;
        int a7;
        int a8;
        int a9
    }NeufInt;
    //prototype de la fonction cadre "nouvelle version"
    void cadre(NeufInt a);
    //utilisation dans la fonction cadre sous la forme de
    a.a1
    (les noms fournis dans la structure devraient idéalement etre "plus parlants" )

    *Idéalement*, la fonction principale devrait n'avoir à faire que trois choses:
    • appeler une fonction qui se charge d'initialiser l'application
    • appeler une fonction qui se charge de la gestion
    • libérer correctement les ressources

    cela donnerait un truc du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main(char argc, char **argv)
    {
        LaFonctionDinit();
        LaFonctionUtile();
        LaFonctionLiberante();
        return 0;
    }
    [TIP] Plus une fonction est importante, plus il sera difficile de t'y retrouver dedans, et plus difficile sera le débuggage [/TIP]
    Certains vont jusqu'à considérer qu'une fonction ne devrait pas dépasser une cinquantaine de lignes (deux "pages de la console" qui prend 25 lignes en plein écran)...

    De la meme manière, les lignes d'un case ne devraient pas etre plus nombreuses qu'une petite diziane...

    Sinon, c'est qu'il est peut etre intéressant de créer une fonction

    Ton switch/case se verrait avantageusement remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    switch(n1)
    {
        case 0:
            PourCase0();
            break;
        case 1:
            PourCase1();
            break;
        case 2:
            PourCase2();
            break;
        case 8:
            PourCase8();
            break;
    }
    Avec des noms "qui vont bien" pour les noms de fonctions, avoue que c'est plus parlant que les presque 160 instructions que tu as mises dans tes cases

    Une autre chose qui frappe, c'est que dans chaque case on trouve des déclarations...
    [FIXME] j'en suis resté sur l'idée que toutes les déclarations de variables devaient etre effectuée avant la premier instruction de la fonction... qu'en dit la norme actuelle?[/FIXME]

    Je te les recopie ici:
    Citation Envoyé par case 0:
    FILE *fichier;
    char problem[35]={'A','F','R','I','Q','U','I','A','\0'};
    char client[35];
    char gaz[35];
    char anne[35];
    char mois[35];
    char k;
    int a,b,c,d,e,f,g,h,i,j;
    char nomfich[6]={'n','a','d','o','r','\0'};
    Citation Envoyé par case1
    FILE *fichier;
    char problem[35]={'A','T','L','A','S','\0'};
    char client[35];
    char gaz[35];
    char anne[35];
    char mois[35];
    char k;
    int a,b,c,d,e,f,g,h,i,j;
    char nomfich[6]={'n','a','d','o','r','\0'};
    Citation Envoyé par case2
    char problem[35]={'B','U','T','S','I','R','\0'};
    char client[35];
    char gaz[35];
    char anne[35];
    char mois[35];
    char k;
    int a,b,c,d,e,f,g,h,i,j;
    char nomfich[6]={'n','a','d','o','r','\0'};
    ...N'y a-t-il rien qui te choque dans l'histoire?

    Personnellement, ce qui me "choque", c'est que ce sont toujours exactement les même nom de variables, avec exatement les memes tailles, et que, seul, change les valeur de deux variables (nomfich et problem)...

    Il pourrait etre intéressant, vu qu'apparemment, toutes ces valeurs sont utilisées dans un meme but, de créer une structure qui aille bien avec... En n'y mettant peut etre simplement pas le pointeur sur le fichier ni le caractère k qui te sert visiblement pour le getch...

    Cela donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct Le_Nom_Struct_Qui_Va_Bien
    {
        char problem[35];
        char client[35];
        char gaz[35];
        char anne[35];
        char mois[35];
        int a,b,c,d,e,f,g,h,i,j;
        char nomfich[6];
    }Le_Nom_Type_Qui_Va_Bien;
    De telle manière, chaque fois que tu as besoin de cette structure tu l'appelle sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le_Nom_Type_Qui_Va_Bien mavar;
    et tu n'as plus qu'à initialiser mavar.nomfich et mavar.problem...

    Cela te permettra d'éviter les copier/coller à répétitions et les erreurs de recopies (d'autant plus que la plupart des EDI fournissent un système d'auto complétion)...

    Ce qui me choque encore plus, c'est que, pour les case que tu as indiqué, finalement, il n'y a jamais que cest valeurs qui changent (éventuellement lors d'un affichage)...

    Cela signifie que les quatre fonctions dont j'ai parlé plus haut (PourCase0(), PourCase1(),PourCase2() et PourCase8()) pourraient très bien être regroupées en une seule:

    Il suffirait de donner à cette fonction les valeur de problem et de nomfich...

    Le prototype serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void RemplacementPourCase(char *pournom, char *pourprob);
    l'appel s'en ferait sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //(    snip   )
    case 0:
        RemplacementPourCase("nador\0","AFRIQUIA\0");
        break;
    case 1:
        RemplacementPourCase("nador\0","ATLAS\0");
        break;
    //(snip)
    //   !!!!! n'oublie pas le \0  final des différentes chaines  !!!!!
    Le code de la fonction deviendrait enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Le_Nom_Type_Qui_Va_Bien mavar;
    strcpy(mavar.problem,pourprob);
    strcpy(mavar.nomfich,pourfich);
    //(    snip   )
    printf("Centre:%s",mavar.nomfich);
    //    (    snip    )
    //la lecture dans le fichier sous la forme de
    fscanf(fichier,"%s",mavar.element);
    En applicant déjà ces différents conseils, tu devrais arriver à un code
    • plus compact
    • bien plus facilement lisible, donc, plus compréhensible et donc, plus facilement débuggable

    PS: Je me suis encore une fois laissé emporté par ma verve j'espères que vous excuserez la longueur du post
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XStream][String]out of memory
    Par Invité dans le forum Persistance des données
    Réponses: 8
    Dernier message: 10/01/2006, 14h52
  2. [C++] [gcc] out of memory
    Par fxp17 dans le forum GCC
    Réponses: 5
    Dernier message: 06/01/2006, 10h29
  3. [pb mémoire] out of memory d'eclipse
    Par Casp dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/05/2005, 16h39
  4. Out of memory
    Par shurato dans le forum ANT
    Réponses: 1
    Dernier message: 10/11/2004, 16h19
  5. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo