Re: Question de c/c++

Page principale

Répondre à ce message
Auteur: Edgar Bonet
Date:  
À: guilde
Sujet: Re: Question de c/c++
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.