hello,
Je suis en train de jouer avec ffmpeg que j'ai recompilé (sous MSYS, donc via un GCC) et je l'utilise dans un projet compilé sous Visual Studio 2005 en C++.
Jusque là, tout se passait bien, mais j'ai noté une petite fuite mémoire, donc, pour la tracker, j'ai voulu remplacer les symboles av_malloc, av_realloc et av_free comme prévu dans la lib ffmpeg.
Voilà la déclaration des symboles :
Code :
- void *av_malloc(FF_INTERNAL_MEM_TYPE size) av_malloc_attrib av_alloc_size(1);
- void *av_realloc(void *ptr, FF_INTERNAL_MEM_TYPE size) av_alloc_size(2);
- void av_free(void *ptr);
|
du coup, j'ai fait mon implémentation assez logiquement :
Code :
- extern "C"
- {
- void *av_malloc( size_t iSize ) { /* ... */ }
- void *av_realloc( void *pData, size_t iSize ) { /* ... */ }
- void av_free(void *pData) { /* ... */ }
- }
|
Et donc, je n'attrappe que les appels à av_free. Ce qui semble donc gêner, ce sont les attributs sur av_malloc et av_realloc qui sont en fait des __attribute__((__malloc__)) et __attribute__((alloc_size(n))) après préprocesseur.
Il me semblait que ces attributs servaient seulement à des questions d'optimisation, donc je ne vois pas en quoi ca change quelqeu chose au niveau du linker.
Ca vous parle ?
Edit : Au cas où certains se le demanderaient, je compile en __cdecl par défaut
Edit 2 : FF_INTERNAL_MEM_TYPE correspond soit à unsigned int (vieille version du compilo ou de la lib) soit à size_t (version actuelle). En testant avec les deux, j'obtiens les mêmes résultats de toute façon.
Message édité par theShockWave le 04-05-2011 à 12:36:12
---------------
last.fm