Pregunta

  1. Según publicaciones de 2008 (no puedo encontrarlo ahora), cheque de montón de glibc No funciona en un entorno multiproceso. ¿Todavía es una situación ahora en 2010?
  2. ¿Heap Check habilitado de forma predeterminada? (GCC 4.1.2)? No configuro Malloc_check_, no consciente de llamar a mCheck (), pero a veces recibo un error GLIBC doble libre con Backtrace. ¿Quizás está habilitado por alguna bandera de compilación?
¿Fue útil?

Solución

De forma predeterminada, sin usar malloc_check_ o mcheck (), GLIBC hace algunas pequeñas comprobaciones que no perjudican el rendimiento, como llamar dos veces gratis () en el mismo fragmento de memoria. Es por eso que recibe algunos de estos mensajes, pero no tendrá todos los mensajes proporcionados por la API sustituto de MALLOC que puede obtener usando Malloc_check_ (que está haciendo muchas más pruebas, pero mucho más intensivo en CPU). Puede verificar esto activando un error y probándolo con y sin malloc_check_. Por ejemplo, para un simple doble (), obtengo errores "Double Free o Corruption (Top)" o "Free (): Pointer no válido" dependiendo cuando establezco MALLOC_CHECK_ o no.

Para responder a la 1/ pregunta, MCHECK se basa en los ganchos de malloc ya que existe (como 15 años), y no pretenden ser seguros.

Fuentes: GLIBC/MALLOC/MALLOC.C, http://sourceware.org/bugzilla/show_bug.cgi?id=9939

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top