[debuggen] Doppelt verkettete Listen?
-
Kann mir mal jemand erklären wie man sowas "normal" Debuggen kann? Ist doch verrückt ... Der Debugger spuckt immer irgendwelche komischen Adressen im Speicher aus die nicht wirklich das machen, was ich will.
Gibts hierfür ne Idee wie man das sinvoll debuggen kann?
Beispiel:
Wenn ich einem Handle eine Adresse geben:ref struct ment{ String^ bla; ment^ adresse; } Handle->letzteAdresse = gcnew ment; zweitesHandle = Handle->letzte Adresse;
Nun gefällt es mir nicht das die Adresse in Handle->letzteAdresse nicht die selbe wie bei zweitesHandle ist.
-
Hier mal ein vollständiges Beispiel:
namespace Foo { ref struct ment { System::String^ bla; ment^ letzteAdresse; }; } int main() { Foo::ment ^Handle = gcnew Foo::ment; Handle->letzteAdresse = gcnew Foo::ment; Foo::ment ^zweitesHandle = Handle->letzteAdresse; if (System::Object::ReferenceEquals(Handle->letzteAdresse, zweitesHandle) == false) System::Console::WriteLine("ungleich!"); else System::Console::WriteLine("Gleich!"); }
Wie man sieht sind die beiden Objekte wirklich gleich, aber die Adressen sind unterschiedlich... das liegt vermutlich daran, dass die Adressen keine Rolle spielen, sondern nur Referenzen auf ein Objekt sind... Die eine Variable liegt auf dem Stack (zweitesHandle) die andere in einem anderen Object drin; somit haben beide eine anderen Referenzce-Root und deshalb vermutlich eine andere Adresse...
Mit "ReferenceEquals" kannst Du rausfinden, ob zwei objekte identlisch sind (also auf die gleiche Referenz zeigen!)PS: Warum verwendest Du nicht eine fertige Klasse aus System::Collections?
-
Genial.
Genau das hab ich gesucht.
Ich liebe dich! :)*smile*
-
Kann man irgendwie die Adresse herausbringen auf die der Zeiger grad Zeigt?
Wie oben im Beispiel. Ich möchte aber gerne per Console::WriteLine die Adresse ausgeben ist das irgendwie technisch machbar?
LG