Erreur bizzare - C - Programmation
Marsh Posté le 22-02-2005 à 23:31:29
free(&ff); ??? oh la coquille !
sinon, l'erreur est probablement à la ligne précédant ta ligne 1.
Marsh Posté le 22-02-2005 à 23:42:27
Pour l'erreur c'est un vieux beug ... je sais pas :
Code :
|
Et là plus de bug ... va savoir.
Et pour le free(&ff), comment je peux faire pour vider le contenu d'un pointeur constant ?
Marsh Posté le 23-02-2005 à 00:00:01
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)
Marsh Posté le 23-02-2005 à 00:00:43
En gros y a pas une fonction toute jolie pour faire ça, faut que je face :
Code :
|
C'est ça ?
Marsh Posté le 23-02-2005 à 00:01:20
Ca marche meme pas
EDIT : ah si
Marsh Posté le 23-02-2005 à 01:11:58
[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 ...
Code :
|
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...
Marsh Posté le 23-02-2005 à 01:57:16
Je crois que tu nous a pondu un paté de code plus que douteux... !
Code :
|
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.
Marsh Posté le 23-02-2005 à 08:11:41
Chronoklazm a écrit :
|
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.
Marsh Posté le 23-02-2005 à 08:17:30
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" ?
|
Marsh Posté le 23-02-2005 à 08:20:30
printf a écrit : char ff[10]="dgjkdgj"; |
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} |
Marsh Posté le 23-02-2005 à 08:32:34
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 Faut faire gaffe parce que les balises code rajoutent les numéros de ligne...
Marsh Posté le 23-02-2005 à 16:38:26
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 :
|
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 ?
Marsh Posté le 23-02-2005 à 17:31:59
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 : |
Oui.
Marsh Posté le 22-02-2005 à 23:20:20
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 ...
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 !