TD4

Voir le sujet précédent Voir le sujet suivant Aller en bas

TD4

Message  didi le Dim 17 Oct 2010, 22:57

bonsoire à tous

dans le td4 j'ai une error
quelqu'un peut m'aider ..

Code:
#include "td4.h"
#define NULL 0
BMaillon * newBM ( TVal val )    {
   BMaillon premier ;
   premier.value = val;
   premier.suivant = NULL;
   premier.precedent = NULL;
   return *premier;
}

error est :
Code:
invalid type argument of unary '*' (have 'BMaillon')

merci

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD4

Message  Anthoblack le Dim 17 Oct 2010, 23:19

Ta méthode renvoi ce sur quoi pointe un pointeur BMaillon. Sauf que premier n'est pas un pointeur BMaillon, vu comment il est déclaré...
De plus, ta valeur de retour serait... un pointeur BMaillon, si on en croit la signature de la méthode !

Mnt, ça date déjà, le C, dans ma tête... Razz

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: TD4

Message  didi le Dim 17 Oct 2010, 23:27

oui merci ..

mnt j'ai déclaré une autre variable le type BMaillon * retult
retult = &premier;
ça fontionne merci .. Very Happy encore Problem solved

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD4

Message  nvs le Dim 17 Oct 2010, 23:51

pour ce que j'en ai compris, le Problem solved me semble hâtif... retourner l'adresse d'une variable locale n'est jamais une bonne idée, ni la redéfinition (erronée) d'une constante symbolique standard...





Suspect

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: TD4

Message  didi le Lun 18 Oct 2010, 16:27

c'est vrai je doit alouer une zone memoir et je sauve dans cette zone et je retourne son adr(un pointer)

Code:
BMaillon * newBM ( TVal val )    {
   BMaillon *premier = (BMaillon *) malloc(sizeof(struct BMaillon));
   if (premier != NULL)   {
      (*premier).value = val;
      (*premier).suivant = NULL;
      (*premier).precedent = NULL;
   }
      return premier;
}

merci ...

et ce n'est pas fini .. Smile

Code:
void deleteBM (BMaillon ** adr ) {

   if(adr.suivant.precedent != NULL ){
      adr.suivant.precedent = adr.precedent.suivant;
   }
   if(adr.precedent.suivant != NULL )   {
      adr.precedent.suivant = adr.suivant.precedent;
   }
    free(adr);
}

j'ai une( Laughing 4) error comme
request for member 'suivant' in something not a structure or union
à la ligne : premier if
Code:
if(adr.suivant.precedent != NULL ){
si je comprends bien cette erreur signifie "problem de acceder une structure de structure"


free(adr);
pour cette istruction la methode free desaloue le zone de memoire pointer par adr ..?

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD4

Message  smb le Lun 18 Oct 2010, 17:38

Attention ! La fonction deleteBM ne s'occupe pas d'effectuer la suppression logique d'un BMaillon de la liste bi-directionnelle de BMaillon. Elle s'occupe uniquement de désallouer l'espace occupé par ce BMaillon en supposant que la suppression logique de la liste a été faite..

Code:

void deleteBM ( BMaillon * * adr ) ;
Dans cette fonction, la variable locale adr reçoit l'adresse d'un pointeur de BMaillon (adr est en effet un pointeur de pointeur de BMaillon).
Comment à partir de adr libérer ce pointeur de BMaillon ?
La seule bonne réponse se trouve parmi les 3 suivantes :
1) free (&adr)
2) free (adr)
3) free (*adr)

Question

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: TD4

Message  didi le Lun 18 Oct 2010, 21:34

La seule bonne réponse se trouve parmi les 3 suivantes :
1) free (&adr)
2) free (adr)
3) free (*adr)

pour trouver le reponse entre j'ai essayé ptit example code

Code:

int main() {
Date *d = (Date*) malloc(sizeof(Date));
Date **p = &d;

(*d).annee = 2010;
   (*d).jour = 30;
   (*d).mois = 7;
/* une methode de td1 qui affiche une date */
printDate((*d),VRAI);

printf("\nAvant le free L'annee de date d vaut : %i",(*d).annee);

free(*p);
/*free(d);*/

printf("\nApres free L'annee de date d vaut : %i",(*d).annee);
printf("\nLa mois de date d vaut : %i",(*d).mois);
printf("\nLajour de date d vaut : %i",(*d).jour);

les resultats sont
2010/7/30 : printDate
Avant le free L'annee de date d vaut : 2010
Apres free L' annee de date d vaut : 2034
Apres free Le mois de date d vaut : 08
Apres free Le jour de date d vaut : 24


ma question est après avoir desalouer la zone memoire par methode free
est-ce qu'il y a de qlqch dans cette zone mémore ..?
ou est-ce que l'autre programme ou l'autre utilisateur peut modifier
dans la zone memoire que je viens de louer ...?

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: TD4

Message  nvs le Lun 18 Oct 2010, 23:36

didi a écrit:ma question est après avoir desalouer la zone memoire par methode free
est-ce qu'il y a de qlqch dans cette zone mémore ..?
ou est-ce que l'autre programme ou l'autre utilisateur peut modifier
dans la zone memoire que je viens de louer ...?
un début de réponse à ta question ici... et une suite intéressante ici... ou encore ici...





jocolor

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: TD4

Message  mvh le Mar 19 Oct 2010, 00:07

[juste pour rire et détendre l'athmosphère]
didi a écrit:ma question est après avoir desalouer ...
... après avoir desaoulé ?!
j'ai peur de ne pas bien comprendre !
(le modérateur peut déplacer cette dernière remarque dans un sujet plus approprié ... sur la cafette par exemple)
[/juste pour rire et détendre l'athmosphère]

_________________

La fête c'est nul sans Kidibul !
... (vieux proverbe local)



mvh

Nombre de messages : 5973
Age : 104
Prénom : Marcel VANHAELEN
Statut : (fin de bail)
Win 3.1 à reprendre
Localisation : Koekeliek de Baselberg
Date d'inscription : 06/12/2006

Revenir en haut Aller en bas

Re: TD4

Message  L@rgo_XIII le Lun 25 Oct 2010, 16:31

didi a écrit:
j'ai une( Laughing 4) error comme
request for member 'suivant' in something not a structure or union
à la ligne : premier if
Code:
if(adr.suivant.precedent != NULL ){
si je comprends bien cette erreur signifie "problem de acceder une structure de structure"

Pour moi cette erreur dit plutot que tu essaies d'accéder à un attribut nommé 'suivant' dans quelque chose qui n'est ni une structure, ni une union.

Je suis plutôt d'accord avec le compilateur (de toute façon il a presque toujours raison Cool ) puisque dans ce cas, tu cherches un attribut dans un pointeur de pointeur vers un maillon.

Syntaxiquement

Code:
if((*(*(*adr)).suivant).precedent != NULL ){

serait plus juste. Car tu dois aussi prendre en compte que lorsque tu vas demander le "maillon suivant" tu vas recevoir un pointeur vers ce maillon et non pas le maillon lui même.

J'ai mis également un petit temps avec de m'habituer à tout celà, car j'avais tendance à aligner les attributs en les séparant par des points comme toi, par habitude avec les appels de méthodes et l'accès aux variables locales lorsqu'on utilise des classes en orienté objet scratch

Sur ce, je retourne à mes moutons, car mon propre TDC4 n'est pas encore terminé.

Lionel

L@rgo_XIII

Nombre de messages : 80
Age : 30
Prénom : Lionel
Statut : Etudiant en 3e année Réseau & Télécommunicatio
Localisation : Uccle
Date d'inscription : 20/09/2010

http://largoxiii.wordpress.com

Revenir en haut Aller en bas

Re: TD4

Message  Contenu sponsorisé Aujourd'hui à 07:13


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum