Valgrind Fehler: Wird beim Beenden verwendet: 72.704 Bytes C ++ - Initialisierungsliste Verrücktheit mit char *

Problem

Ich habe ein seltsames Problem, mit dem ich nicht gerechnet habe. Ich habe eine Klasse namens Answers und in der Kopfzeile ist dies:

class Answer
{
    char* aText;
    bool b_correct;
public:
    Answer():aText(0){;}  //default constructor
}

Der Haupttreibercode (zum Testen) lautet wie folgt:

int main(void) 
{

    static const unsigned int MAX_ANSWERS = 5;
    Answer answers[MAX_ANSWERS];
}

Die (unerwartete) Verrücktheit, die ich bekomme, ist, dass eine Zuweisung stattfindet und ich noch nirgendwo in meinem Code eine neue verwendet habe. Ich vermute, dass das Zeichen * dies in der Initialisierungsliste aufruft.

Ich benutze Valgrind, um meinen Code zu testen, und ich erhalte 11 Zuweisungen und 10 Freigaben. Wenn ich den Initialisierer von @ entfer:aText(0), die zusätzliche Zuweisung verschwindet.

Ich verstehe, dass dies schlecht konstruierter Code ist. Ich verfolge einen Kursüberblick, um zu lernen, wie man in C ++ schreibt. Kann mir bitte jemand helfen, zu verstehen, wie der Speicher belegt ist oder was während der Initialisierungsliste passiert, um einen Anruf bei new zu veranlassen?

Ich weiß, dass der Fehler vom angezeigten Code herrührt. Ich weiß, dass die zusätzliche Zuweisung erfolgt, wenn ich nur diesen Code kompiliere und ausführe.

Valgrind Output:

==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)

Plattform Information:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage