problème lors de la compilation
Bonjour, j'ai le code suivant :
Code:
1 2 3 4 5 6 7
|
Species * CopySpecies(Species * s_)
{
Species * s=CreateSpecies(s_->name,s_->M,s_->T,s_->LT,s_->HT);
CopyViscosity(s_,s);
return s;
} |
où le prototype de la fonction CopyViscosity est le suivant :
Code:
1 2
|
void CopyViscosity(Viscosity *,Viscosity *); |
Pourquoi est-ce que mon compilateur ne m'a pas donné un message d'erreur ? Pire, pourquoi n'y a-t-il pas de bug lors de l'exécution ? Y a-t-il un comportement indéterminé (ce que je pense fort) ?
Voici mes structures utilisées :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
struct structspecies
{
char * name; /* name */
double M; /* molar mass */
double T; /* threshold temperature */
double * LT; /* 7 low temperature coefficients */
double * HT; /* 7 high temperature coefficients */
Atoms * atoms; /* atomic composition (C, H, O, N) of the species */
Viscosity * visc; /* viscosity data */
};
typedef struct structspecies Species;
typedef struct
{
double pot; /* Lennard-Jones potential parameter (the ratio epsilon_0/k_B)
(in K)
*/
double sigma; /* Lennard-Jones collision diameter (in Angstrom) */
double sigma2; /* sigma*sigma */
double Tc; /* critical temperature (in K) */
double Pc; /* critical pressure (in atm) */
double Vc; /* critical volume (in cm^3/(g*mol)) */
double Zc; /* critical compressibility */
} Viscosity; |
je compile avec les options d'Emmanuel :
Citation:
ED_PARANOIA=-O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int \
-Werror-implicit-function-declaration -Wmain -Wparentheses \
-Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused \
-Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef \
-Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings \
-Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes \
-Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn \
-Wformat -Wmissing-format-attribute -Wno-deprecated-declarations \
-Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long \
-Wunreachable-code
L'erreur que j'obtenais à la fin de mon programme, lors de la libération de toute la mémoire allouée, était celle-ci :
Citation:
out(3093,0xa000d000) malloc: *** Deallocation of a pointer not malloced: 0x3098a0; This could be a double free(), or free() called with the middle of an allocated block; Try setting environment variable MallocHelp to see tools to help debug
ce qui se comprend bien vue ma faute de prototype... Mais pourquoi ai-je cette erreur sur mon Mac intel (gcc version 3.0) et pourquoi n'apparait-elle pas sur mon linux Suse pro 9.3 (gcc version 3.0) ?
Merci