C und C++, im Gegensatz zu Java und C#, nicht automatisch Null initialisieren, da es kein Punkt überschreiben Speicher sind doppelt, wenn du gehst, um einfach mal so einen eigenen Wert gesetzt; Der Nachteil ist, dass Sie sehr vorsichtig sein müssen, um sicherzustellen, dass Sie nicht zuerst nicht initialisierte Daten verwenden.
Ihr Problem zu beheben, Sie entweder das Mitglied im Konstruktor oder in der Initialisierungsliste einstellen:
Trie() {
this->color = 0;
this->root = nullptr;
}
Oder:
Trie() :
color (0),
root (nullptr)
{
}
Was Ihren color
Wert, hält eine Verwendung Tupel stattdessen, weil es keine Garantien gibt, dass int
eine 32-Bit-Ganzzahl sein wird (vorausgesetzt, Sie müssen 0-255 RGB-Werte speichern):
struct RgbColor {
uint8_t r;
uint8_t g;
uint8_t b;
RgbColor() :
RgbColor(0, 0, 0) {
}
RgbColor(uint8_t r, uint8_t g, uint8_t b) :
r(r),
g(g),
b(b) {
}
RgbColor(uint32_t rgb) :
r((rgb >> 24) & 0xFF),
g((rgb >> 16) & 0xFF),
b((rgb >> 8) & 0xFF) {
}
}
weil Sie es niemals auf 'nullptr' setzen. Im Konstruktor nach 'color = 0;', schreibe 'root = nullptr;' – Arash
Du hast 'test.root' nie initialisiert, was hast du erwartet, als du 'test.root == nullptr' geschrieben hast? –
Da Ihr Konstruktor Root nicht initialisiert, kann es alles sein. – user31264