[language C]

calidor -  
Darshu Messages postés 303 Statut Membre -
Bonjour,
J'essaye d'installer lam-mpi sous linux (debian) avec les compilateurs g++ et ifort.
Lors de l'installation j'ai l'erreur suivante:
all_opt.c: In function 'int ao_parse(OPT*, int*, char**)':
all_opt.c:603: invalid conversion from 'void*' to 'char**'
make[2]: *** [all_opt.lo] error 1

et à la ligne 603 de all_opt.c je peux lire:
aod->ao_string_dups = malloc(sizeof(char**) * (*pcmdc + 1));

Evidemment je cause pas du tout C...
Merci de votre aide, c'est supra important!

3 réponses

Radek
 
Il doit manquer un cast, modifi ta ligne par :

aod->ao_string_dups = (char **) malloc(sizeof(char**) * (*pcmdc + 1)); 
0
Darshu Messages postés 303 Statut Membre 64
 
Je ne suis pas d'accord avec toi Radek pour le cast ! Il y en a peut-être besoin, mais c'est un char ***. Soit
aod->ao_string_dups = (char ***) malloc(sizeof(char**) * (*pcmdc + 1));
En effet, pour un char*, on fait un malloc(sizeof(char)*n). Pour un char** c'est donc malloc(sizeof(char*)*n) et donc pour un char*** on se retrouve avec malloc(sizeof(char**)*n).

Un moyen simple pour s'en souvenir : le cast a toujours une * de plus que le sizeof ;)
0
Radek
 
Dans l'absolu je suis ok avec toi, mais il faut regarder les messages d'erreur ! En l'occurence :

all_opt.c:603: invalid conversion from 'void*' to 'char**' 


Donc si le compilateur attends un char** on lui donne un char** et pas un char ***... ;-)
0
Darshu Messages postés 303 Statut Membre 64
 
Tout à fait, mais dans ce cas le malloc ne peut être que sur un sizeof(char *) ... Sinon il y a une faute de logique derrière tout ça ;)

Bref, il a résolu son problème mais je suis d'accord avec toi :]
0
calidor
 
Je viens de comprendre ma bourde: en spécifiant le compilateur C j'ai donné le C++ (ou l'inverse) et du coup il a pas aimé. Là tout marche.
En tout cas merci!
0