Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1382 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Erreur bizzare

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur bizzare

n°990625
Chronoklaz​m
Posté le 22-02-2005 à 23:20:20  profilanswer
 

Voila j'ai le code suivant qui compile nickel sous gcc avec les warning et ansi mais sous MS-VC++ 6.0 ca me sort une erreur de syntaxe ... :heink:
 

Code :
  1. char ff[10]="dgjkdgj";
  2.   ff[0]='a';
  3.   ff[1]='b';
  4.   ff[2]='c';
  5.   free(&ff);
  6.  
  7.   ff[0]='a';
  8.  
  9.   printf("%s    ", ff);


 
Il me sort "syntax error : missing ';' before 'type'" pour la ligne ou je declare ff. C'est quoi ce binz ?


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
mood
Publicité
Posté le 22-02-2005 à 23:20:20  profilanswer
 

n°990646
++fab
victime du syndrome IH
Posté le 22-02-2005 à 23:31:29  profilanswer
 

free(&ff); ??? oh la coquille !
 
sinon, l'erreur est probablement à la ligne précédant ta ligne 1.

n°990663
Chronoklaz​m
Posté le 22-02-2005 à 23:42:27  profilanswer
 

Pour l'erreur c'est un vieux beug ... je sais pas :  

Code :
  1. FILE* fp = fopen("source.txt", "rw" );
  2.  
  3.   int x=0;
  4.   int size=0;
  5.   char ff[10]="lkjhlkjh";
  6.  
  7.   while(x!=FIN || size<2){
  8.     ++size;
  9.     x = lexer(fp);
  10.     if (x==ERROR) printf("Erreur! " );
  11.     switch (x)
  12.       {
  13.       case IDENTIFICATEUR:
  14. printf("ident " );
  15. break;
  16.       case MOTCLE :
  17. printf("mot-cle " );
  18. break;
  19.       case SENS :
  20. printf("sens " );
  21. break;
  22.       case OPERATEUR :
  23. printf("operateur " );
  24. break;
  25.       case ANGLE :
  26. printf("angle " );
  27. break;
  28.       case NOMBRE :
  29. printf("nombre " );
  30. break;
  31.       }
  32.   }
  33.  
  34.   ff[0]='a';
  35.   ff[1]='b';
  36.   ff[2]='c';
  37.   //free(&ff);
  38.  
  39.   ff[0]='a';
  40.  
  41.   printf("%s    ", ff);


 
Et là plus de bug ... va savoir.
 
Et pour le free(&ff), comment je peux faire pour vider le contenu d'un pointeur constant ?


Message édité par Chronoklazm le 22-02-2005 à 23:43:54

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°990676
++fab
victime du syndrome IH
Posté le 23-02-2005 à 00:00:01  profilanswer
 

il faut déclarer les variables en début de bloc (si tu suis la norme C99, ce n'est pas obligatoire). Donc si tu déclares une variable à la suite d'instructions qui ne sont pas des déclarations, ça couine.
 
free sert à libérer de la mémoire allouer sur le tas. Dans ton cas, attends tranquillement le dépilement en fin de bloc, c'est tout ce que tu peux faire.
 
Il manque le test pour vérifier l'ouverture du fichier.
printf("blabla" ) --> puts("blabla" );  
ou fputs("blabla",stdout); (sans sauter de lignes)

n°990678
Chronoklaz​m
Posté le 23-02-2005 à 00:00:43  profilanswer
 

En gros y a pas une fonction toute jolie pour faire ça, faut que je face :

Code :
  1. void vide(char chaine[]){
  2. int taille=strlen(chaine);
  3. int i=0;
  4. for(i=0;i<taille;i++){
  5.  chaine[i]=NULL;
  6. }
  7. }


C'est ça ?


Message édité par Chronoklazm le 23-02-2005 à 00:02:31

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°990679
Chronoklaz​m
Posté le 23-02-2005 à 00:01:20  profilanswer
 

Ca marche meme pas :(
 
EDIT : ah si


Message édité par Chronoklazm le 23-02-2005 à 00:04:16

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°990682
++fab
victime du syndrome IH
Posté le 23-02-2005 à 00:03:31  profilanswer
 

et ça sert à rien

n°990712
printf
Baston !
Posté le 23-02-2005 à 01:11:58  profilanswer
 

[quote=990625,0,1,175659]Voila j'ai le code suivant qui compile nickel sous gcc avec les warning et ansi mais sous MS-VC++ 6.0 ca me sort une erreur de syntaxe ... :heink:
 

Code :
  1. char ff[10]="dgjkdgj";
  2.   ff[0]='a';
  3.   ff[1]='b';
  4.   ff[2]='c';
  5.   free(&ff);
  6.  
  7.   ff[0]='a';
  8.  
  9.   printf("%s    ", ff);


 
Il me sort "syntax error : missing ';' before 'type'" pour la ligne ou je declare ff. C'est quoi ce binz ?[/quote]
 
char ff[10]="dgjkdgj";
 
C'est quoi ce machin ?
Je ne suis pas sûr que ce soit vraiment ce que tu veuille faire...

n°990748
leneuf22
Posté le 23-02-2005 à 01:57:16  profilanswer
 

Je crois que tu nous a pondu un paté de code plus que douteux... !
 

Code :
  1. char ff[10]="dgjkdgj";


printf> c'est tout à fait valide, c'est un tableau de 10 char avec une valeur initiale. Enfin, ptet que ta remarque signifie : "à quoi ça sert" et dans ce cas je suis d'accord...
Au lieu de mettre une valeur initiale aussi inutile, autant ne rien mettre du tout.
 
Chronoklazm> Ce n'est PAS un pointeur constant. C'est un tableau, point.
 
Un free() s'applique à un pointeur, pas à un tableau, et encore moins à quelque chose alloué sur la pile et non sur le tas (par malloc ou autres).
Ensuite, je suis pas très sûr de comprendre ce que tu entends par "vider".
Soit tu veux écraser ce qu'il y a dedans (quel interêt ?), auquel cas tu écrases avec ce que tu veux, mais pas avec NULL, c'est totalement absurde. NULL c'est un pointeur, ton tableau n'est pas fait de pointeurs.
 
Soit tu veut le virer de la mémoire, ben c'est bête, tu peux pas : il est en mémoire automatique (sur la pile) : soit tu attends sagement la fin de ta fonction, ça se fera tout seul, soit tu fais une allocation programmée avec une fonction comme malloc et t'es libre de libérer la mémoire quand tu veux (aucun interêt ici je crois).
 
Franchement je comprends pas grand chose à ton truc.

n°990770
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-02-2005 à 08:11:41  profilanswer
 

Chronoklazm a écrit :


Code :
  1. char ff[10]="dgjkdgj";
  2.   free(&ff);




free() sert à libérer un bloc alloué par malloc()  ou un de ses frères. Libérer un tableau local n'a aucun sens et provoque un comportement indéfini.


Message édité par Emmanuel Delahaye le 23-02-2005 à 08:21:42

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 23-02-2005 à 08:11:41  profilanswer
 

n°990773
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-02-2005 à 08:17:30  profilanswer
 

Chronoklazm a écrit :

Et pour le free(&ff), comment je peux faire pour vider le contenu d'un pointeur constant ?


Ca veut dire quoi "vider le contenu d'un pointeur constant" ?  

  • Un pointeur constant ne peut être modifié.  
  • Un pointeur 'tout court' est une variable. Comme toute variable, elle a toujours un contenu. Celui ci peut avoir un sens ou non, c'est une autre histoire.


char *p = malloc(123);
 
if (p != NULL)
{
   /* la valeur de p est definie.  
    * C'est l'adresse d'un bloc memoire valide.  
    */
 
 
   free (p);
   /* la valeur de p est definie.  
    * C'est l'adresse d'un bloc memoire invalide.  
    */
 
   p = NULL;
   /* la valeur de p est definie (NULL).  
    * C'est la valeur qui signifie 'pointeur invalide'.  
    */
}


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°990776
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-02-2005 à 08:20:30  profilanswer
 

printf a écrit :

char ff[10]="dgjkdgj";
C'est quoi ce machin ?


C'est du code C parfaitement valide. Ca crée un tableau de 10 char initialisé comme suit:

{'d', 'g', 'j', 'k', 'd', 'g', 'j', 0, 0, 0}


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°990777
printf
Baston !
Posté le 23-02-2005 à 08:32:34  profilanswer
 

Certes, mais pourquoi l'initialiser pour ensuite réécrire un morceau dessus et tenter une libération plus que douteuse de l'ensemble ?
 
(même si il est vrai qu'au début j'avais pas fait gaffe que c'était une déclaration et pas une bête affectation, qui d'ailleurs est tout aussi valide)
 
EDIT: OK, le deuxième programme n'est pas le même que le premier y'a des lignes qui sont arrivées en renfort :D Faut faire gaffe parce que les balises code rajoutent les numéros de ligne...


Message édité par printf le 23-02-2005 à 08:33:36
n°991487
Chronoklaz​m
Posté le 23-02-2005 à 16:38:26  profilanswer
 

printf a écrit :

Certes, mais pourquoi l'initialiser pour ensuite réécrire un morceau dessus et tenter une libération plus que douteuse de l'ensemble ?


 
Je pensais que c'était possible, je voulais un simple tableau de taille statique et non un char * et si je l'initialisai (ce qui n'est pas interdit) je voulais le reutiliser par la suite mais en ayant "effacer" son contenu auparavent ...
 

Code :
  1. char ff[10]="dgjkdgj";


 
A quoi ca sert ? A rien de special juste faire des tests dessus.
 
EDIT: En gros si j'ai bien compris je ne peux pas le faire moi meme, donc si je veux le faire moi il faut passer par un char *ff; puis des malloc ?


Message édité par Chronoklazm le 23-02-2005 à 16:41:58

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°991592
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-02-2005 à 17:31:59  profilanswer
 

Chronoklazm a écrit :

un simple tableau de taille statique <...> je voulais le reutiliser par la suite mais en ayant "effacer" son contenu auparavent ...


Ca veut dire quoi 'effacer' ? Mettre un pattern fixe dedans ? memset() est ton ami...

Citation :


En gros si j'ai bien compris je ne peux pas le faire moi meme, donc si je veux le faire moi il faut passer par un char *ff; puis des malloc ?


Oui.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Erreur bizzare

 

Sujets relatifs
Erreur de segmentationFormulaire Combobox + Value = erreur de récuparation ???
Erreur de déploiement d'EAR sous Weblogic 8.1message d'erreur bien etrange
erreur SQL sans référence[Erreur BuffReader] pkoi ca boucle?
Page d'erreur Websphere Application Server [résolu]Erreur de permission lors de copie de fichiers
[HTML] erreur bizzare ![php] erreur tres bizzare avec les jointures-need help !
Plus de sujets relatifs à : Erreur bizzare


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR