Funkion prameter wird nicht zerstört, (Funktion + code) paramter kaputt !?!?



  • Moin,
    ich habe eine Funktion...

    void test(Node<Object> *node)
    {
    	(*node)->ausgabe();
    
    	for(int i = 0; i < node->get_num_childs(); ++i)
    	{
    		list<Edge<Object>*> nn = node->child;
    		/*for(list<Edge<Object>*>::iterator iter = nn.begin(); iter != nn.end(); iter++)
    		{
    
    		}*/
    	}
    }
    

    Wenn ich nun die innere Schleife auskommentiere, kann ich im debugger sehen das node Korrekt aufgebaut ist.
    Sobald ich die Schleife mitnehme, dann ist node nicht mehr korrekt aufgebaut. Genauer die KinderPointer von node zeigen ins nichts.
    Die Funktion wird nur einmal aufgerufen und befinden sich in der main funktion
    also nicht irgentwo in Node oder Edge. Alle Member sind zu Testzwecke public.

    Also ich schau mit den debugger immer in Zeile 3...also die schleife kann das nicht zerschießen. (also nicht direkt)

    Woran kann das liegen?

    MFG Albrecht



  • Kann es sein, dass nur der Debugger ein wenig spinnt? - Sprich kriegst du dann einen Fehler? Da die Schleife so eingentlich keinen Unterschied machen dürfte.. (Sofern du nicht wo anders undefiniertes Verhalten hast..)

    Probiers einfach mal mit Ausgaben. Wenn es funktioniert, dann hast der Debugger ein Problem. 😉



  • Hi,
    benutze übrigends Visual studio express 2008.
    Das Problem die Funktion soll mir die Struktur ausgeben.
    Stürtz aber ab wenn sie auf ein Kind zu greifen will da der
    Pointer ins nichts zeigt 😞

    Hab jetzt mal die Funktion auf

    void test(Node<Object> *node)
    {
    	(*node)->ausgabe();
    
    	//(*node->child.begin())->child->ptr->ausgabe();
    }
    

    reduziert...jetzt ist die Auskommentierte Zeile schuld.

    Evtl. liegt es an meinem Baum aufbau...

    Node<Object>* cur_node = node[0];
    Edge<Object>(cur_node,node[1],LEFT);
    Edge<Object>(node[1],node[3],LEFT);
    

    Vieleicht ist das nicht so gut das ich die Instanzierung ( ich glaub dafür gibt es noch ein anders Wort fällt mir gerade aber nicht ein )
    von Edge verwende um eine Verbindung zwischen Nodes herzustellen.

    MFG



  • Das sieht für mich sehr nach undefiniertem Verhalten aus. Zeig lieber mal her, wie du an den Speicher kommst, respektive, wo du die Zeiger füllst.
    Ich würde bahaupten, dass die Zeiger einfach nicht mehr gültig sind. (oder es nie waren).


Anmelden zum Antworten