Question

  1. Selon les messages de 2008 (je ne peux pas le trouver en ce moment), tas glibc vérifier ne fonctionne pas dans un environnement multithread. Est-il encore aujourd'hui la situation en 2010?
  2. Est-ce que le chèque activé par défaut? (Gcc 4.1.2)? Je ne contiendraient pas MALLOC_CHECK_, ne pas au courant d'appeler MVérifiez (), mais encore parfois reçu une erreur de glibc à double libre avec backtrace. Peut-être qu'il est activé par un drapeau de compilation?
Était-ce utile?

La solution

Par défaut, sans utiliser MALLOC_CHECK_ ou MVérifiez (), glibc fait quelques petits chèques qui ne blesse pas les performances, comme appeler deux fois free () sur le même morceau de mémoire. C'est la raison pour laquelle vous obtenez certains de ces messages, mais vous n'aurez pas tous les messages fournis par le api de remplacement malloc vous pouvez obtenir à l'aide MALLOC_CHECK_ (qui sont en train de faire des tests beaucoup plus, mais trop beaucoup plus intensive cpu). Vous pouvez vérifier cela en déclenchant une erreur, et de le tester avec et sans MALLOC_CHECK_. Par exemple, pour un simple double-free (), je reçois "double libre ou la corruption (en haut)" ou.: Erreurs "free () pointeur non valide" en fonction chaque fois que je mets MALLOC_CHECK_ ou non

Pour répondre à la 1 / question, MVérifiez repose sur des crochets malloc car ils existent (comme 15 ans), et ceux qui ne sont pas destinés à être thread-safe.

Sources: glibc / malloc / malloc.c, http://sourceware.org /bugzilla/show_bug.cgi?id=9939

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top