Wie kann ich einen Zeiger auf ein Objekt Null? C++

Ich bin auf ein lustiges Spiel und ich habe es so eingerichtet, dass bei den MEISTEN gibt es 3 Monster auf einer Ebene. Also ich habe 3 Zeiger auf die Monster. Sie alle beginnen als NULL.

Wie gehe ich bei der Einstellung der Zeiger auf NULL zurück, nachdem das monster stirbt? Oder vielleicht habe ich die falsche Idee? Im wesentlichen brauche ich die monster entfernt werden, bis die Zeiger regeneriert als andere monster.

Habe ich versucht, ein paar Dinge, aber ich habe einfach immer seg faults.

Ich habe versucht mit löschen, löschen Sie einfach die Einstellung auf NULL, und repointing es. Es kann nicht herausfinden.

Hier ist, wie ich die Zeiger:

CreatureFactory myCreatures = CreatureFactory::instance();
    Creature * pCreature1 = NULL;
    Creature * pCreature2 = NULL;
    Creature * pCreature3 = NULL;;

    ItemFactory myItems = ItemFactory::instance();
    Item * pItem1 = myItems.generateItem();

    dl.placeInGame(personPlaying,randomGen);
    int monsterCount = 0;
    int turnCount = 0;
    bool playingGame = true;
    char playerController;

    while (playingGame){
            if ((turnCount % 2 == 0) && (personPlaying.getHP() < personPlay$
                    personPlaying.generateHP();
            }
            if (((turnCount % 3) == 0) && (monsterCount < 2)){
                    if(pCreature1 == NULL){
                            pCreature1 = myCreatures.generateCreature(4);
                            dl.placeInGame(pCreature1,randomGen);
                            monsterCount += 1;
                    }
                    else if(pCreature2 == NULL){
                            pCreature2 = myCreatures.generateCreature(4);
                            dl.placeInGame(pCreature2, randomGen);
                            monsterCount += 1;
                    }
                    else if(pCreature3 == NULL){
                            pCreature3 = myCreatures.generateCreature(4);
                            monsterCount += 1;
                    }
            }
            dl.dump();
            personPlaying.dumpStats();

 CreatureFactory code..
 CreatureFactory & CreatureFactory::instance(){
    static CreatureFactory myObj;
    return myObj;
}

CreatureFactory::CreatureFactory(){
    m_mtRandom.seed( time(NULL) );
    fstream xmlFile;
    xmlFile.open("critters.xml");
    vector<XMLSerializable*> pObjects;
    parseXML(xmlFile, pObjects);

    XMLSerializable * pObject;

    for(auto it = pObjects.begin(); it != pObjects.end(); it++){
            pObject = (*it);
            Creature * pCreature = dynamic_cast<Creature*>(pObject);
            if (pCreature != NULL){
                    m_vCreatures.push_back(pCreature);
            }
    }
}

CreatureFactory::~CreatureFactory(){

}
    Creature * CreatureFactory::generateCreature(int iMaxLevel) {
    vector<Creature*> tempCreatures;

    for(auto it = m_vCreatures.begin(); it != m_vCreatures.end(); it++){
            if ((*it)->getLevel() <= iMaxLevel){
                    tempCreatures.push_back((*it));
            }
    }
    int randomCreature = (m_mtRandom() % (tempCreatures.size() - 1));


    Creature * pCreature = tempCreatures.at(randomCreature);

    Creature * pReturnValue = new Creature(*pCreature);

    return pReturnValue;
}

Dann mache ich eine Tonne von looping und verwenden Sie Tonnen von Klassen. Der Zeiger auf diesen monster-Objekte übergeben bekommen durch etwa 6 oder 7 Klassen.. einer von denen muss ich auf NULL gesetzt, wenn seine HP 0 trifft.

Dank

  • Bitte zeig uns etwas code. Auch, Kennzeichnen Sie bitte diese Frage mit dem entsprechenden language-Tags (z.B. [c] oder [c++]).
  • Warum.. Es ist eine Allgemeine Frage. Ja sorry, ich vergaß zu-tag c++ werde ich es aktualisieren.
  • Es hängt davon ab, ob der Zeiger auf die "eigenen" die Monster, also sind Sie dynamisch reserviert und müssen Sie zerstört werden?
  • Nein, Sie besitzen nicht die monster, und Sie sind nicht dynamisch zugeteilt. Sie sollten nicht zerstört werden. Nur muss ich Sie leer zu sein und bereit zu zeigen Sie auf ein anderes Objekt
  • Was ist falsch mit monster1 = NULL;? Ihre Frage scheint sehr einfach, so dass ich denke, es ist ein bisschen mehr dahinter. Ich denke, du seg Störungen werden verursacht durch etwas ganz anderes. Dies ist ein XY-problem. Wie gewohnt, zeigen uns einige code.
  • Der code verbreitet sich durch 10+ - Dateien und ein paar tausend Zeilen.
  • OK, ich vermute, dass das problem ist, dass Sie den Zeiger auf NULL in einem Teil des Programms, aber es gibt Exemplare, die Zeiger, die in anderen teilen des Programms, die nicht bekommen, auf NULL gesetzt. Ist das richtig? Es gibt nichts, Magie über die Zeiger, nur weil Sie einen Zeiger auf NULL an einer Stelle, bedeutet nicht, dass jeder identische Zeiger im gesamten code wird auf NULL gesetzt.
  • Wählen Sie den entsprechenden code und setzen Sie es in Ihrer Frage. Ein paar Zeilen, wo Sie die monster. ein paar Zeilen, wo Sie es löschen, und vielleicht ein paar Zeilen, wo Sie immer die segfault. Sie müssen nicht den gesamten source-code.

InformationsquelleAutor Habit | 2013-04-24
Schreibe einen Kommentar