du delire totale en pointeur... - C - Programmation
Marsh Posté le 21-01-2005 à 00:39:03
tu dois surement faire une mauvaise manip de pointeurs à un endroit ou un autre. Sans codes, c'est dur de t'en dire plus.
Marsh Posté le 21-01-2005 à 00:48:50
c'est pas simple a dire ,
printf("avant addfile num = %d name= %s type = %d mode = %d\n",(*inode).num, (*inode).name,(*inode).type,(*inode).i_mode);
printf("avant add-file courant num = %d name= %s type = %d mode = %d\n",(*current2).num, (*current2).name,(*current2).type,(*current2).i_mode);
filefs= fopen ("fs","w" ) ;
printf("fiin de zmkdir : \n\n" );
printf("avant addfile num = %d name= %s type = %d mode = %d\n",(int)(*inode).num, (*inode).name,(*inode).type,(*inode).i_mode);
printf("avant add-file courant num = %d name= %s type = %d mode = %d\n",(*current2).num, (*current2).name,(*current2).type,(*current2).i_mode);
me donne a l'ecran:
avant addfile num = 1 name= rien type = 0 mode = 99
avant add-file courant num = 808580296 name= / type = -1208061904 mode = 13111
fiin de zmkdir :
avant addfile num = 22473635 name= øóÿ¿ôÊë·S38,6ë· type = 360 mode = -2956
avant add-file courant num = -1073744196 name= A type = -1208061904 mode = -2288
et si j'enleve le "filefs= fopen ("fs","w" ) ; " du code
ca affiche bien 2 fois la meme chose.
je sais que je suis pas clair du tout , en plus j'commence a foutre partout ,et c'est un bordel...
et des trucs de ce ganre , j'en ai partout.
Marsh Posté le 21-01-2005 à 00:53:48
J'ai la flemme de regarder attentivement ton gloubiboulga^W post.
Je me suis arreté sur fopen
tu prend un flux pour un descripteur?
un pointeur * FILE est un type opaque il ne se manipule pas comme une structure.
Marsh Posté le 21-01-2005 à 00:57:52
c'est déclaré comment ta variable filefs ?
ca compile sans warnings ?
Marsh Posté le 21-01-2005 à 00:59:06
bon j'ai rien dit, ton code dans les bonnes balises et en entier ce serait quand meme plus clair
Marsh Posté le 21-01-2005 à 01:00:24
mais bordel, tu l'alloues comment ton inode ? parce que quand on voit que t'as pas encore appris l'opérateur -> on raisonnablement penser que inode n'est pas correctement initialisé
Marsh Posté le 21-01-2005 à 01:01:53
l'operateur ->, tu connais ?
filefs doit etre de type FILE*, sinon l'erreur est plus haut
Marsh Posté le 21-01-2005 à 01:04:05
desolé , je peux pas donner tout le code , c'est bcp trop gros et laid.
jouvre un quelconque fichier( c un exemple , meme autre chose... ) et les champs de ma structure deviennent autre.
puor le pointeur inode , une fonction crée une structure z_inode et revoie son adresse , recupéré par le pointeur nommé inode
bon ,vous cassez pas la tete , je vais chercher , ya surement une bonne explication qqpart
ps , je connais ->
merci a tous
Marsh Posté le 21-01-2005 à 01:09:25
miminou a écrit : |
faut pas avoir peur
la ligne ... = malloc ... , pas tout non plus
Marsh Posté le 21-01-2005 à 08:20:09
miminou a écrit : |
Alors je te conseille de faire un esai sur du code plus petit, juste pour vérifier les principes. Poste ce code si tu bloques. Et ne mélange pas les fichiers et les listes tant que tu ne maitrises pas les deux...
Le C, c'est pas un langage de débutant...
Citation : ps , je connais -> |
Alors pourquoi tu ne l'utilises pas ? Franchement, '(*p).', je n'ai jamais vu ça dans du code professionel, même ancien ...
Marsh Posté le 21-01-2005 à 09:04:56
Emmanuel Delahaye a écrit : |
j'en ai deja vu qui preferait ecrire *(toto + 20) a la place de toto[20]...
(je te laisse imaginer le carnage sur des tableaux en plusieurs dimensions)
Marsh Posté le 21-01-2005 à 09:35:07
chrisbk a écrit : j'en ai deja vu qui preferait ecrire *(toto + 20) a la place de toto[20]... |
par contre, je préfère écrire (lorsque ça se justifie), *(t-1) que t[-1] ...
Marsh Posté le 21-01-2005 à 11:38:33
chrisbk a écrit : j'en ai deja vu qui preferait ecrire *(toto + 20) a la place de toto[20]... |
de même que certains s'obstinent à écrire '&a[i]', alors que 'a + i' suffit...
Marsh Posté le 21-01-2005 à 11:59:30
re bonjour a tous,
j'ai trouvé !! enfin le debut
je vais vous expliquer toute ma stupidité ( le mot est faible) ,
car c'est grace a vous et particulierement a ++fab qui m'a fait tilté, alors je vous doit bien un petit moment de rigolade :
par exemple , un pointeur *inode que je remplissait en lisant un fichier..
mais je ne lui avait surtout pas associé de memoire !! ( malloc )
ou alors un structure local dans une fonction local de ma lib et je renvoyait son adresse .
pourrez vous un jour me pardonner....
bon , bah maintenant que j'ai mis 48h pour resoude ca, il me reste 12h pour tout finir , ps: re
Marsh Posté le 21-01-2005 à 12:16:13
Emmanuel Delahaye a écrit : de même que certains s'obstinent à écrire '&a[i]', alors que 'a + i' suffit... |
ah la je sais pas
entre les deux mon coeur balance le premier est vraiment brut de décoffrage, tandis que dans le deux on vient bien le but (prendre l'adresse de l'element i tu tableau a)
Marsh Posté le 21-01-2005 à 15:43:39
Ce n'est pas parce que deux écritures sont equivalente qu'il faut systématiquement choisir la plus courte. Suivant les cas j'utilise plutôt l'une ou plutôt l'autre, et '&a[i]' correspond souvent mieux à ce que la ligne est vraiment sensée faire.
Marsh Posté le 21-01-2005 à 16:46:24
Reply
Marsh Posté le 21-01-2005 à 00:34:50
je comprends plus rien du tout...
(et ca me fait perdre un temps enorme)
j'ai pointeur sur une structure , je lis des champs de cette struture, c'est bon,
et si je fait une operation ( ici j'ouvre juste un fichier, un simple open ) et que je relis les champs de ma structure, il me marque n'importe quoi !!!!!
je deviens fou , c'est du grand n'importe quoi !!
(je n'arrete pas d'avoir des erreurs irrealistes , ca m'enerve )
pouvez vous m'aider , me donner un indice ?
merci d'avance.