du delire totale en pointeur...

du delire totale en pointeur... - C - Programmation

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.

Reply

Marsh Posté le 21-01-2005 à 00:34:50   

Reply

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.

Reply

Marsh Posté le 21-01-2005 à 00:40:43    

il pointe sur quoi ton pointeur de structure ?

Reply

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.  :fou:


Message édité par miminou le 21-01-2005 à 00:50:13
Reply

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.

Reply

Marsh Posté le 21-01-2005 à 00:57:52    

c'est déclaré comment ta variable filefs ?
ca compile sans warnings ?
 

Reply

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

Reply

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é

Reply

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

Reply

Marsh Posté le 21-01-2005 à 01:04:05    

:jap:  
 
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  :heink:
 
ps , je connais ->  
merci a tous


Message édité par miminou le 21-01-2005 à 01:09:49
Reply

Marsh Posté le 21-01-2005 à 01:04:05   

Reply

Marsh Posté le 21-01-2005 à 01:09:25    

miminou a écrit :

:jap:  
desolé , je peux pas donner tout le code , c'est bcp trop gros et laid.


 
faut pas avoir peur  :lol:  
la ligne ... = malloc ... , pas tout non plus

Reply

Marsh Posté le 21-01-2005 à 08:20:09    

miminou a écrit :


desolé , je peux pas donner tout le code , c'est bcp trop gros et laid.


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 ...


---------------
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/
Reply

Marsh Posté le 21-01-2005 à 09:04:56    

Emmanuel Delahaye a écrit :


Alors pourquoi tu ne l'utilises pas ? Franchement, '(*p).', je n'ai jamais vu ça dans du code professionel, même ancien ...


 
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)

Reply

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]...
(je te laisse imaginer le carnage sur des tableaux en plusieurs dimensions)


 
par contre, je préfère écrire (lorsque ça se justifie), *(t-1) que t[-1] ...

Reply

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]...
(je te laisse imaginer le carnage sur des tableaux en plusieurs dimensions)


de même que certains s'obstinent à écrire '&a[i]', alors que 'a + i' suffit...
 


---------------
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/
Reply

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 .
 
 :pfff:  pourrez vous un jour me pardonner....   :cry:  
 
bon , bah maintenant que j'ai mis 48h pour resoude ca, il me reste 12h pour tout finir , ps: re  :cry:

Reply

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 [:petrus75]
entre les deux mon coeur balance [:petrus75] 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)

Reply

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.

Reply

Marsh Posté le 21-01-2005 à 16:46:24    

Le plus explicite est souvent la meilleure.


---------------
Loose Change Lies | Bars | Last.fm
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed