Pergunta

  1. De acordo com as postagens de 2008 (não consigo encontrar agora), Verificação da pilha do glibc Não funciona em ambiente multithread. Ainda é situação agora em 2010?
  2. A verificação heap ativada por padrão? (GCC 4.1.2)? Eu não defino MALLOC_CHECK_, não ciente de ligar para mcheck (), mas às vezes ainda recebo um erro duplo grátis glibc com backtrace. Talvez seja ativado por algum sinalizador de compilação?
Foi útil?

Solução

Por padrão, sem usar MALLOC_CHECK_ ou MCHECK (), o Glibc faz alguns pequenos cheques que não prejudicam o desempenho, como ligar duas vezes livre () no mesmo pedaço de memória. É por isso que você está recebendo algumas dessas mensagens, mas não terá todas as mensagens fornecidas pela API substituta Malloc que pode obter usando MALLOC_CHECK_ (que estão fazendo muito mais testes, mas muito mais intensivos na CPU). Você pode verificar isso desencadeando um erro e testando -o com e sem malloc_check_. Por exemplo, para um simples duplo livre (), recebo erros "duplos livres ou corrupção (em cima)" ou "grátis (): ponteiro inválido", dependendo sempre que eu defino malloc_check_ ou não.

Para responder à 1/ pergunta, Mcheck depende de ganchos de Malloc, pois existe (como 15 anos), e eles não se destinam a ser seguros.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top