Prog C : au secours!!!!!

loic -  
 loic -
Hello

Je tourne la dessus depuis un petit moment, j'ai besoin d'aide sinon je vais me suicider :)

Je veux creer un tableau d'adresse de structure serieTraduction.
Cette structure se compose de deux char* origine et traduction.

L'appel de la fonction definitTraduc doit ajouter une adresse de serieTraduction
dans le tableau traduc de taille NB_TRADUC+1.

La variable tmp est bien initialise.

L'allocation dynamique tel que je l'ai creer provoque un bus errone lorsque
j'alloue la memoire a traduc[NB_TRADUC]->origine.

Si j'augmente la taille alloue, la premiere utilisation de definitTraduc se
passe bien mais lors du 2eme appel une faute de segmentation apparait a la
reallocation de la memoire de traduc.

Merci par avance de vos conseils.

int definitTraduc(serieTraduction** traduc)
{
char ** tmp

traduc = (serieTraduction**)realloc(traduc , (NB_TRADUC+1) *
(sizeof(serieTraduction*)));

tmp = (char**)malloc((NB_LANGUE) * sizeof(char*) );

traduc[NB_TRADUC] = (serieTraduction*)malloc( sizeof(serieTraduction));

/*divers traitements et mise en place de tmp*/

traduc[NB_TRADUC]->origine =
(char*)malloc((strlen(tmp[0])+1)*(sizeof(char)+2));

strcpy(traduc[NB_TRADUC]->origine , tmp[0]);

traduc[NB_TRADUC]->traduction =
(char*)malloc((strlen(tmp[LANGUE_CHOISIE])+1)*(sizeof(char)+2 ));

strcpy(traduc[NB_TRADUC]->traduction , tmp[LANGUE_CHOISIE]);

NB_TRADUC++;
}
A voir également:

1 réponse

tafiscobar Messages postés 1281 Statut Contributeur 177
 
pourqoi tu n'utiliserais pas les listes??? t'as pas a allouer dynamiquement la memoire, cela se fait directement par le systeme, si t'as pas jamais utilise voila une cellule que tu p utiliser apres

struct serieTraduction {
char *origine,traduction;
serieTraduction* suiv;
};

//et la tu declares ta varaible de type struct serieTraduction
serieTraduction* MaSerie , tmp;
MaSerie =new serieTraduction;
MaSerie->suiv = NULL;
tmp = new serieTraduction;
tmp->suiv = NULL;

origine = new char[var];//j'utilise la syntaxe de C++, celle de C j'utilise rarement
if(MaSerie->suiv ==NULL){
strcpy(MaSerie->origine,source);
strcpy(MaSerie->traduction, source2);
delete tmp;
}
else{
strcpy(tmp->origine,source);
strcpy(tmp->traduction,source2);
MaSerie->suiv = tmp;}

//la, tu n'as pas a reagarde la taille de ta liste et tu p supprimer ou tu v et qd tu v, il te suffiyt juste de refaire le chainage, mais bon c'est plus complique q ce q j'ai fait, il ya beacoup de choses q je n'ai pas teste, c'est juste un exemple.Tu sais ce qui te reste a faire
tafiscobar
0
loic
 
le pb c'est que je ne connais pas la taille des chaines mises dans les sructures.
Et la taille du tableau peut etre enorme et je dois faire un recherche dichotomique dedans et je ne vois pa comment faire avec une liste
0