Erro Valgrind: em uso na saída: 72.704 bytes Lista de inicialização C ++ estranheza com char *
Questão:
Eu tenho um problema estranho que eu não esperava. Eu tenho uma classe chamada Respostas e dentro do cabeçalho é este:
class Answer
{
char* aText;
bool b_correct;
public:
Answer():aText(0){;} //default constructor
}
O código principal do driver (teste) é este:
int main(void)
{
static const unsigned int MAX_ANSWERS = 5;
Answer answers[MAX_ANSWERS];
}
A estranheza (inesperada) que estou percebendo é que há uma alocação acontecendo e ainda não usei uma nova em nenhum lugar do meu código. Eu estou supondo que o char * está chamando isso na lista de inicialização.
Estou usando o valgrind para testar meu código e estou recebendo 11 alocações e 10 liberações. Quando removo o inicializador de:aText(0)
, a alocação extra desaparece.
Eu entendo que este é um código mal construído. Estou seguindo um esboço do curso para aprender a escrever em C ++. Alguém pode me ajudar a entender como a memória é alocada ou o que está acontecendo durante a lista de inicialização para causar uma chamada para nova?
Eu sei que o erro está vindo do código mostrado. Eu sei que a alocação extra está acontecendo Quando eu compilar e executar apenas esse código.
Saída Valgrind:
==12598== Memcheck, a memory error detector
==12598== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==12598== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==12598== Command: ./Answers
==12598==
==12598==
==12598== HEAP SUMMARY:
==12598== in use at exit: 72,704 bytes in 1 blocks
==12598== total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==12598==
==12598== LEAK SUMMARY:
==12598== definitely lost: 0 bytes in 0 blocks
==12598== indirectly lost: 0 bytes in 0 blocks
==12598== possibly lost: 0 bytes in 0 blocks
==12598== still reachable: 72,704 bytes in 1 blocks
==12598== suppressed: 0 bytes in 0 blocks
==12598== Rerun with --leak-check=full to see details of leaked memory
==12598==
==12598== For counts of detected and suppressed errors, rerun with: -v
==12598== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Informações da plataforma:
Fedora 22
gcc.x86_64 5.1.1-4.fc22
valgrind.x86_64 1: 3.10.1-13.fc22
codeblocks.x86_64 13.12-14.fc22