Bonjour, j'ai le code suivant :
où le prototype de la fonction CopyViscosity est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void CopyViscosity(Viscosity *,Viscosity *);
Voici mes structures utilisées :
je compile avec les options d'Emmanuel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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 :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
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) ?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
Merci
Partager