Bonjour !
Patrick Dupré a écrit :
> j'ai des fuites memoire que je parviens pas a controller.
Ah... problème facile à rencontrer en C...
> Tout se passe "normalement" si je fais param_doublet.Rabi_0 = 1e-8 ;
> [...] Si la variable est une constante, soit il n'y a pas
> d'allocationb intempestive, soit la desallocation se fait
> correctement.
Je n'ai rien compris à ces explications...
> Je ne vois pas comment forcer la desallocation qui devrait etre
> automatique.
En appelant free(). Pourquoi elle devrait être automatique ? Si je crois
ce que dit Valgrind, dans la pile d'appels tu as
gsl_integration_cquad() -> ode_BAP_impact_2()
-> call_ode_BAP_2() -> malloc()
De ce que je comprends :
* gsl_integration_cquad() appelle en boucle ode_BAP_impact_2() pour
évaluer la fonction à intégrer pour différentes valeurs de la
variable indépendante `impact' ;
* ode_BAP_impact_2() appelle une fois call_ode_BAP_2() pour résoudre
un système d'équations ;
* call_ode_BAP_2() appelle malloc() pour... je ne sais pas.
Si j'ai bien compris, la mission de call_ode_BAP_2() est juste de
résoudre un système d'équations, pas d'allouer de la mémoire et la
donner à l'appelant. Si cette fonction appelle malloc(), c'est donc pour
ses propres besoins, et donc elle est responsable de libérer cette
mémoire avec free(), ce qu'elle ne fait visiblement pas (ou pas
toujours).
À+,
Edgar.