Error de Valgrind: en uso a la salida: 72.704 bytes Lista de inicialización de C ++ rareza con char *
Problema:
Tengo un problema extraño que no esperaba. Tengo una clase llamada Respuestas y dentro del encabezado es esta:
class Answer
{
char* aText;
bool b_correct;
public:
Answer():aText(0){;} //default constructor
}
El código del controlador principal (prueba) es este:
int main(void)
{
static const unsigned int MAX_ANSWERS = 5;
Answer answers[MAX_ANSWERS];
}
La rareza (inesperada) que obtengo es que está sucediendo una asignación, y aún no he usado una nueva en mi código. Supongo que el char * está llamando a esto en la lista de inicialización.
Estoy usando valgrind para probar mi código, y obtengo 11 asignaciones y 10 liberaciones. Cuando elimino el inicializador de:aText(0)
, el aloc extra desaparece.
Entiendo que este es un código mal construido. Estoy siguiendo un resumen del curso para aprender a escribir en C ++. ¿Alguien puede ayudarme a comprender cómo se asigna la memoria o qué sucede durante la lista de inicialización para provocar una llamada a nuevo?
Sé que el error proviene del código que se muestra. Sé que la asignación extra está sucediendo cuando compilo y ejecuto solo este código.
Salida de 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)
Información de la 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