A voir également:
- Structure en c
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Structure adresse ip - Guide
- La structure a besoin d'un nettoyage ✓ - Forum Debian
- L'importateur de fichiers a détecté une incohérence dans la structure de fichier premiere pro - Forum Montage et acquisition vidéo
5 réponses
Simple, c'est pas sizeof(char) qu'il faut a l'initialisation, mais la taille maximale de ta chaine+1, donc ca devient:
#define MAXC 255
typedef struct Noeud{
char * traduction;
char * origine ;
struct Noeud * gauche ;
struct Noeud * droit;
} Noeud;
Noeud * nouveau;
nouveau->origine = (char*) malloc( MAXC);
/*vide le truc pour pas avoir de crasse, pas necessaire, mais utile si tu joue bcp avec tes chaines */
memset(nouveau->origine,0,MAXC);
strcpy(nouveau->origine , tmp[0]);
nouveau->traduction = (char*)malloc(MAXC);
strcpy(nouveau->traduction , tmp[LANGUE_CHOISIE]);
Bon mon define peut etre remplacer par sizeof(tmp[0]), mais ce que tu veux en faire... (pour enregistrer ds un fichier le define vient bien a point)
#define MAXC 255
typedef struct Noeud{
char * traduction;
char * origine ;
struct Noeud * gauche ;
struct Noeud * droit;
} Noeud;
Noeud * nouveau;
nouveau->origine = (char*) malloc( MAXC);
/*vide le truc pour pas avoir de crasse, pas necessaire, mais utile si tu joue bcp avec tes chaines */
memset(nouveau->origine,0,MAXC);
strcpy(nouveau->origine , tmp[0]);
nouveau->traduction = (char*)malloc(MAXC);
strcpy(nouveau->traduction , tmp[LANGUE_CHOISIE]);
Bon mon define peut etre remplacer par sizeof(tmp[0]), mais ce que tu veux en faire... (pour enregistrer ds un fichier le define vient bien a point)
Merci de tes conseils
malhereusement ca ne marche pas
et je ne comprends vraiment pas pkoi.
Trop mal concu le c...
AAAAAAAAAAAAAAAAARRRRRRRRRRRRRRGGGGGGGGGGHHHHHHHHHHHHHHhh
malhereusement ca ne marche pas
et je ne comprends vraiment pas pkoi.
Trop mal concu le c...
AAAAAAAAAAAAAAAAARRRRRRRRRRRRRRGGGGGGGGGGHHHHHHHHHHHHHHhh
peut-etre il te faut dabord allouer ta structure Noeud
Noeud * nouveau;
nouveau = (Noeud*)malloc( sizeof(char) );
ensuite tu peux :
nouveau->origine = (char*)malloc( (sizeof(char)));
enfin je pense ...
Noeud * nouveau;
nouveau = (Noeud*)malloc( sizeof(char) );
ensuite tu peux :
nouveau->origine = (char*)malloc( (sizeof(char)));
enfin je pense ...
jai chge ma sruct
#define MAXC 255
typedef struct Noeud{
char[MAXC] traduction;
char[MAXC] origine ;
struct Noeud * gauche ;
struct Noeud * droit;
} Noeud;
Ca a compile et maintenenat ca compile plus :(
noeud.h:7: parse error before `['
noeud.h:7: warning: no semicolon at end of struct or union
noeud.h:11: parse error before `}'
noeud.h:11: warning: data definition has no type or storage class
si je remet un char * pour origine et traduc sa recompile
Bizarre vous avez dit bizarre
#define MAXC 255
typedef struct Noeud{
char[MAXC] traduction;
char[MAXC] origine ;
struct Noeud * gauche ;
struct Noeud * droit;
} Noeud;
Ca a compile et maintenenat ca compile plus :(
noeud.h:7: parse error before `['
noeud.h:7: warning: no semicolon at end of struct or union
noeud.h:11: parse error before `}'
noeud.h:11: warning: data definition has no type or storage class
si je remet un char * pour origine et traduc sa recompile
Bizarre vous avez dit bizarre
je reprends :
struct Noeud {
char *traduction;
char *origine;
struct Noeud *gauche;
struct Noeud *droit;
};
struct Noeud *nouveau;
if( nouveau=(struct Noeud *)malloc(sizeof(struct Noeud))==NULL)
{
prinft("probleme d allocation memoire sur nouveau");
exit(1);
}
if( nouveau->origine = (char*)malloc( sizeof(char) ) == NULL)
{
prinft("probleme d allocation memoire sur nouveau->origine");
exit(1);
}
apres fe gaffe origine ne peut contenir kun seul caractere donc il faut pas de strcpy(machin ...
struct Noeud {
char *traduction;
char *origine;
struct Noeud *gauche;
struct Noeud *droit;
};
struct Noeud *nouveau;
if( nouveau=(struct Noeud *)malloc(sizeof(struct Noeud))==NULL)
{
prinft("probleme d allocation memoire sur nouveau");
exit(1);
}
if( nouveau->origine = (char*)malloc( sizeof(char) ) == NULL)
{
prinft("probleme d allocation memoire sur nouveau->origine");
exit(1);
}
apres fe gaffe origine ne peut contenir kun seul caractere donc il faut pas de strcpy(machin ...
RE ted le magicien, je commence peut etre a etre lourd mais j insiste
Mon pb maintenant est sur les pointeurs.
Le pointeur sur mon noeud de debut traduc est toujours null, il est modif que dans la fction modif par ces lignes
mais reprend null
definitTraduc(Noeud* traduc)
{
struct Noeud * nouveau;
printf("adr traduc %p\n", traduc);
/*nouveau bien initialiser(grace a toi :))*/
nouveau = (Noeud*)malloc(sizeof(Noeud));
initNoeud(nouveau);
setOrigine(nouveau , tmp[0]);
setTraduction(nouveau , tmp[LANGUE_CHOISIE]);
/*le pb commence ici*/
if (traduc == NULL)
{ /*si 1 er noeud*/
printf("traduc null\n");
traduc = nouveau ;
}
else /*si apres*/
ajouteNoeud(traduc , nouveau);
printf("adr %p et %p \n",nouveau, traduc);
}
L execution donne sa si j'appelle deux foi la fctiom:
adr traduc 0
traduc null
adr 27bc8 et 27bc8
adr traduc 0
traduc null
adr 277a8 et 277a8
et au final traduc est null dans le main
Kezako je modifie pourtant bien mon pointeur
Alors pkoi traduc reprends t il NULL?
Mon pb maintenant est sur les pointeurs.
Le pointeur sur mon noeud de debut traduc est toujours null, il est modif que dans la fction modif par ces lignes
mais reprend null
definitTraduc(Noeud* traduc)
{
struct Noeud * nouveau;
printf("adr traduc %p\n", traduc);
/*nouveau bien initialiser(grace a toi :))*/
nouveau = (Noeud*)malloc(sizeof(Noeud));
initNoeud(nouveau);
setOrigine(nouveau , tmp[0]);
setTraduction(nouveau , tmp[LANGUE_CHOISIE]);
/*le pb commence ici*/
if (traduc == NULL)
{ /*si 1 er noeud*/
printf("traduc null\n");
traduc = nouveau ;
}
else /*si apres*/
ajouteNoeud(traduc , nouveau);
printf("adr %p et %p \n",nouveau, traduc);
}
L execution donne sa si j'appelle deux foi la fctiom:
adr traduc 0
traduc null
adr 27bc8 et 27bc8
adr traduc 0
traduc null
adr 277a8 et 277a8
et au final traduc est null dans le main
Kezako je modifie pourtant bien mon pointeur
Alors pkoi traduc reprends t il NULL?
je tavoue que je me suis un peu paumé dans ton prog.j'avais pas du tout fait le raprochement avec ton post sur progzone. je me disais que j'avais déja vue ca kelke par.je vais essaye de mieu comprendre, mais pour le traduc qui reste a NULL à premiere vue je vois pas pourkoi.tu fais pourtant bien l'initialisation
traduc = nouveau
. non franchement ?!? je pige pas
et moi j'ai pas de compilo sous la main donc c'est pas facile.
tin! le C c'est prise de tête parfoi mais ton probleme est interressant et puis on en resort toujours plus fort.
j'essairais de reposter.
traduc = nouveau
. non franchement ?!? je pige pas
et moi j'ai pas de compilo sous la main donc c'est pas facile.
tin! le C c'est prise de tête parfoi mais ton probleme est interressant et puis on en resort toujours plus fort.
j'essairais de reposter.
ouais c'est clair que c'est casse couille le c.
Pour mon dernier pb je m'en suis sorti en creeant un noeud a l'origne avant d'appeller ma fct.
J'ai cru un moment que tout aller rouler Mais au que c'est bien le C, mon prog ne cree que trois ou quatre noeud (nb appel de ma fct)avant de me sortir une faute de segmentation.
Cela se produit quand j'alloue mon nouveau noeud.
nouveau = (Noeud*)malloc(sizeof(Noeud));
Je suis senser en creer une "infinite" noeud alors moi avant ras le bol du C de mes couilles.
Pour mon dernier pb je m'en suis sorti en creeant un noeud a l'origne avant d'appeller ma fct.
J'ai cru un moment que tout aller rouler Mais au que c'est bien le C, mon prog ne cree que trois ou quatre noeud (nb appel de ma fct)avant de me sortir une faute de segmentation.
Cela se produit quand j'alloue mon nouveau noeud.
nouveau = (Noeud*)malloc(sizeof(Noeud));
Je suis senser en creer une "infinite" noeud alors moi avant ras le bol du C de mes couilles.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question