# C et C++ > C > Contribuez >  Gestion de la mmoire [Sources]

## gege2061

Bonjour,

voil j'ai fait un gestionnaire pour scuriser les allocations dynamiques (les fonctione commencent pas le prfixe _sma__) :
Vrification du retour de mallocTest si le pointeur pass  sma_free  bien t allou par sma_malloc ou enregistrTest des dbordementVrification des fuites

Voici un p'tit exemple :


```

```

Rsultat :


```

```

J'espre que cela vous sera utile et si vous avez des remarques (amlioration, bug...), postez le tout  la suite  :;): 

Disponible via subversion : http://subversion.developpez.com/pro...1/C/sma/trunk/

----------


## fearyourself

Ca a l'air fort sympa, je vais regarder ton code avec un regard critique demain!

Jc

----------


## Emmanuel Delahaye

> Bonjour,
> 
> voil j'ai fait un gestionnaire pour scuriser les allocations dynamiques (les fonctione commencent pas le prfixe _sma__) :
> Vrification du retour de mallocTest si le pointeur pass  sma_free  bien t allou par sma_malloc ou enregistrTest des dbordementVrification des fuites


Si je comprends bien, il faut que le je teste avec mon propre mcanisme de dtecton de fuites pour voir si il ne gnre pas de fuites !

Mon mcanisme (SYSALLOC) n'utilise pas malloc(), sinon, on ne peut rien vrifier du tout (on est pas indpendant).


```

```

Y'a un bug...

Je propose un meilleure organisation du code  (supprimmer les lignes avant le trait /* -------------- */ )

----------


## DaZumba

> Mon mcanisme (SYSALLOC) n'utilise pas malloc(), sinon, on ne peut rien vrifier du tout (on est pas indpendant).


Je ne comprend pas cette phrase. Ton sys_malloc() est bien un wrapper de malloc(), non ?

----------


## Emmanuel Delahaye

> Je ne comprend pas cette phrase. Ton sys_malloc() est bien un wrapper de malloc(), non ?


Oui, c'est un wrapper, mais *le mcanisme de traage* n'utilise pas malloc(), sinon, on ne s'en sort plus !

http://emmanuel-delahaye.developpez....src/sysalloc.c

Simple application d'un principe de bon sens qui dit : "On ne peut tre juge et partie"

----------


## DaZumba

> *le mcanisme de traage* n'utilise pas malloc()


Ah, c'est cela que tu voulais dire ! Ok - c'est evident, en effet.

----------


## fearyourself

Cette discussion me rappelle un problme de spcifications... Comment spcifier un outil qui dois spcifier des programmes...  ::roll::  

Mais bon, ce programme part d'une bonne ide et permet, jusqu' un certain degr de vrifier les fuites et les dbordements mmoires.

Ensuite, il est vrai, que si les structures de donnes taient dclares statiquement cela pourrait tre mieux...

Je trouve que c'est dj pas mal,
Jc

----------


## Emmanuel Delahaye

> Cette discussion me rappelle un problme de spcifications... Comment spcifier un outil qui dois spcifier des programmes...


C'est clairement un problme de poule et d'oeuf. Un outil de vrification ne doit pas utiliser les outils qu'il est sens vrifier...



> Mais bon, ce programme part d'une bonne ide et permet, jusqu' un certain degr de vrifier les fuites et les dbordements mmoires.


Si tu arrives  dmontrer qu'il ne provoque pas de fuites lui-mme, pas de problmes.



> Ensuite, il est vrai, que si les structures de donnes taient dclares statiquement cela pourrait tre mieux...
> 
> Je trouve que c'est dj pas mal,


Tu as corrig la fuite que j'ai signale ?

----------


## fearyourself

> Si tu arrives  dmontrer qu'il ne provoque pas de fuites lui-mme, pas de problmes.


Est-ce vraiment ncessaire? Je veux dire, si on sait dterminer les fuites de l'utilisateur, est-ce obligatoire de garantir qu'on ne provoque pas de fuites?

Je parle bien sr dans l'optique o le programme est l pour seulement dtecter les fuites... Bien sr ce n'est pas gnial, mais est-ce ncessaire?




> Tu as corrig la fuite que j'ai signale ?


Il ne dsalloue pas correctement (enfin on dirait)



```

```

J'aurais plutt mis :



```

```

De plus j'ai l'impression qu'il y a un double free sur ce code... le free(obj) est dj fait dans l'appel obj_remove (qui appelle list_remove qui le fait...)

Jc

----------


## Mdinoc

[HS]



> *le mcanisme de traage* n'utilise pas malloc()


En fait, ton mcanisme permet de tracer au maximum *len / sizeof (sREC)* allocations "simultanes", c'est a ?
[/HS]

----------


## Emmanuel Delahaye

> [HS]
> 
> En fait, ton mcanisme permet de tracer au maximum *len / sizeof (sREC)* allocations "simultanes", c'est a ?
> [/HS]


Peut tre. La valeur est indique au lancement... 

Ce que je sais c'est que si ca pte (message d'erreur), je recompile en doublant la taille du bloc statique que je fournis au gestionnaire...

http://emmanuel-delahaye.developpez....nuel-sysalloc/


```
static char Trace[1 << 8];
```

devient


```
static char Trace[1 << 9];
```

etc.

----------


## gege2061

@Emmanuel Delahaye : bien sr que l'on tourne en rond (pour l'oeuf et la poule c'est connu depuis longtemps qui a t le premier). C'est pour a que le but est de rendre ce module sr.




> Oui, c'est un wrapper, mais le mcanisme de traage n'utilise pas malloc(), sinon, on ne s'en sort plus !


Pas compris  ::koi::  Qu'est ce que tu appel _mcanisme de traage_ ?

Merci pour les corrections je vais regarder a  :;):

----------


## Emmanuel Delahaye

> Pas compris  Qu'est ce que tu appel _mcanisme de traage_ ?


Le code en plus qui enregistre les donnes d'allocation (fonction, adresse, taille, fichier, ligne) et qui sont appaires par la fonction de libration.

J'ai du mal  comprendre ta question, vu que tu as un mcanisme quivallent chez toi...

----------


## gege2061

> Le code en plus qui enregistre les donnes d'allocation (fonction, adresse, taille, fichier, ligne) et qui sont appaires par la fonction de libration.
> 
> J'ai du mal  comprendre ta question, vu que tu as un mcanisme quivallent chez toi...


Nan c'est moi qui comprend rien :



> Mon mcanisme (SYSALLOC) n'utilise pas malloc(), sinon, on ne peut rien vrifier du tout (on est pas indpendant).


Je pensais que tu n'utilisais pas malloc en interne pour allouer de la mmoire (d'o mon tonnement).

----------


## gege2061

Pour ceux que a intresse, le projet est toujours en dveloppement !

Je pense fixer la version 1 d'ici peux donc si vous avez des remarques :
Les sources sont disponibles via subversion : http://subversion.developpez.com/pro...1/C/sma/trunk/


```
svn co http://subversion.developpez.com/projets/gege2061/C/sma/trunk/ libsma
```

La documentation en ligne : http://nicolasj.developpez.com/sma/sma_8h.html

Si vous n'avez pas Code::Blocks, le makefile devrait arriver d'ici peu.

Compilation  la rache :


```
cd libsma && gcc -c *.c && ar rcs libsma.a *.o
```

Dploiement :
Copier sma.h et libsma.a dans le dossier de votre projetInclure sma.h en tant que dernier header dans tout les fichiers de votre projetAjouter la ligne suivante au dbut du main :


```
sma_init (SMA_INFO, NULL);
```

Pour la compilation, ajoutez simplement l'option -lsma

----------


## ironzorg

Tu oublies le ranlib  :;):

----------

