2016-08-16 1 views
1

Ich arbeite mit Sockets und ich habe keinen Zugriff auf die TCP-Bibliothek. Es scheint, dass, wenn die Clients die Verbindung trennen, löscht es den Speicher des Objekts, aber es macht es nicht NULL. Wie könnte ich das überprüfen?C++ Überprüfen Sie auf gelöschten Zeiger

Client != NULL => true 

Zur Zeit habe ich die folgende, die Abstürze:

Client is 0xddddddddddddddd

+5

'0xddd ... dd' zeigt an, dass der Speicher nicht initialisiert wurde (im Debug-Modus). Scheint so, als hättest du vergessen, es auf 'NULL' zu setzen. – CompuChip

+0

@CompuChip Agree, in der Debug-Version. Release füllt keine unilaterierten Daten. –

+2

Bitte poste den Code/Ausgaben und keine Bilder davon – slawekwin

Antwort

0

Da die Kommentare richtig angeben, können Sie nicht überprüfen gegen einen gelöschten Zeiger. Aus diesem Grund wird selbst ein halbwegs anständiges C++ - Framework Ihnen sagen, wenn es einen Zeiger löscht. Ein anständiger Rahmen wird hierfür intelligente Zeiger verwenden.

Wenn Sie Code gefunden haben, der nach dem Zufallsprinzip Objekte löscht, ersetzen Sie ihn, anstatt nach Lösungen für die Problemumgehung zu suchen. Dies ist nicht das einzige Problem, das Sie mit einem solchen Code haben werden.

0

Dies ist ein typischer Fall, mit dem Sie bei der Netzwerkprogrammierung umgehen müssen. Wie andere Kommentare sagten, können Sie nicht feststellen, ob ein Zeiger gelöscht wurde oder nicht.

Die Lösung, die ich persönlich benutze, ist shared_ptr, wenn die Verbindung geschlossen wird, die refcount verringern und den Verbindungsstatus auf geschlossen setzen.