Frage

Ich habe einen Zeiger auf eine Karte, die ich versuche zu löschen (diese Karte wurde mit new zugewiesen wurden).

Diese Karte ist gültig denke ich, wenn ich schweben an es während des Debuggens, es zeigt pMap: [0]() ..

Wenn ich versuche zu löschen, leere Karte, meine app beendet wird und ich erhalte eine

Erste-chance-Ausnahme bei 0xsomelocation in myapp.exe:0xsomenumber:Das aufgerufene Objekt wurde von den clients getrennt.

im Ausgabe-Fenster.Was bedeutet das?

Danke..

EDIT:Hier einige Beispiel-code:

typedef map<const char*, StructA*, StructB> myMap;
typedef vector<myMap *> myMapStack;

StructB hat einen überladenen operator () Edit:StructB IST in der Tat eine struct, sorry, die operator () ist nur eine Zeichenfolge Vergleichsfunktion..

In einem Teil meines code, eine Klasse der Konstruktor ruft eine Methode, nennen wir es InitClass(), die initialisiert eine myMap Zeiger wie so:

pMyMap = new myMap; // I also tried this with new myMap()
// this pointer is then pushed onto the a map stack
pMyMapStack.push_back(pMyMap);

Später in dieser Klasse destructor, ich gehe

pMyMap = pMyMapStack.back();
pMyMapStack.pop_back();

delete pMyMap; // after I step over this line the app quits.. and displays that message

Vielen Dank

EDIT:Ich wieder auf eine ältere version der code, der funktioniert, und es funktioniert jetzt gut..

Was funktionierte, war etwas wie:

// after the pMyMapStack.pop_back()
int x = pMyMap->size();
if (x >= 0)
    delete pMyMap;

Früher habe ich verändert hatte es zu diesem:

// after the pMyMapStack.pop_back()
int (x = pMyMap->size();
if (x >= 0){
    pMyMap->clear();
    delete pMyMap;
}

Komisch..Es wäre etwas anderes falsch im code, aber ich kann einfach nicht herausfinden, wo noch..Es ist zu groß (und ich würde wahrscheinlich gefeuert, wenn ich gebucht, den code in seiner Gesamtheit, so let ' s just leave it at that..

Ich denke, es könnte ein Zeiger auf eine null-Karte, die ich versucht habe, zu deaktivieren oder zu löschen, war die Probleme verursacht..

Vielen Dank für all jene, die versucht haben zu helfen...:)

War es hilfreich?

Lösung

ehrlich ich denke, wir gehen nicht, wo ohne echten Code geschrieben.

könnte es 101 Ort sein, wo der Code falsch gelaufen ist, nicht auf die Schnipsel beschränkt geschrieben.

von dem Objekt Einsetzen und Entfernen Implementierung gezeigt, gibt es keine Syntax noch logische Fehler. wenn der Quellcode so wertvoll war hier geteilt werden, versuchen, ein Dummy-Projekt, einfach genug zu schaffen, das Problem zu demonstrieren (wenn das Problem nicht in belangloser proj existiert, wissen Sie anpacken falsche Richtung)

Andere Tipps

Nun, es gibt eine Menge Probleme mit Ihrem Beispielcode. Die Dinge beginnen schief zu gehen, wenn Sie die Karte als instanziiert: <const char*, StructA*, StructB*> Gibt es einen Grund für Sie zu speichern Zeiger in der Karte statt Werten? std::map ist wahrscheinlich, um die Elemente zu speichern, die Sie auf jeden Fall auf dem Heap, um es hinzuzufügen. Auch sollten Sie std::string statt const char* verwenden. Dann gibt es absolut keinen Grund, in dem Komparator als Zeiger zu übergeben.

Auch das ist wahr für Ihren mapStack (Wenn Sie einen Stapel benötigen, warum Sie nicht verwenden?). Solange Sie keine Gegenstände oder verwenden rein virtuellen Basisklassen gibt es den Austausch gibt keinen Grund zu verwenden Zeiger. Und wenn Sie Zeiger verwenden, versuchen Sie nicht roh Zeiger tun verwenden.

Nachdem Sie aus diesen Fehlern gearbeitet haben, es keinen Grund sein sollte für Sie Gebrauch new oder delete tun.

Nur ein Schuss im Dunkeln, da kein Code verfügbar ist. Sind Sie sicher, dass der Zeiger auf eine einzelne Karte und nicht um eine Reihe von Karten (in diesem Fall, dass Sie die Verwendung delete [] benötigen)?

Sie sollten die Lösch tun, bevor Sie den pop_back tun ().

Man wirft Zeiger herum, als gäbe es kein morgen.Die wahrscheinlichste Erklärung ist, dass Sie Stress für Ihre Karte Struktur, die durch schreiben durch einen freigegeben (aber nicht genullt) Zeiger.Siehe pmr-Antwort für weitere Vorschläge.Keine Zeiger verwenden, es sei denn, Sie müssen.Es gibt wenig Grund, Ihren code zu deal mit Karte Zeiger eher als map-Objekte.

Da gibt es nichts über Ihren Code (das Sie auf dem Laufenden), die dieses Problem, das ich gegoogelt für Ihre Fehlerzeichenfolge verursachen könnte und etwas gefunden, es ist mit COM zu tun.

Dieser Beitrag könnte Ihnen helfen: Was kann das sein Ursachen für den Fehler 0x80010108 (Das aufgerufene Objekt wurde von den Clients getrennt)?

Nicht auf die Frage relevant: Ich finde das interessant:

typedef map<const char*, StructA*, StructB*> myMap;

Wie ist Ihre dritte Template-Parameter eine Struktur Zeiger ? Ich nahm an, es würde eine einfache Klasse / Typ sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top