Frage

Ich habe ein Objekt, das ich mit Lösch bin zu befreien, und es hat eine char*, die mit frei in seinem destructor Freeds werden. Der Grund, warum ich frei bin mit, weil ich verwenden strdup und malloc bei der Schaffung des char Zeigers. Der Grund, warum ich malloc bin mit, weil ich strdup verwendet mit Pfaden in den meisten Code zu beginnen. Würde dieses Szenario Ursache Speicherfehler?

War es hilfreich?

Lösung

Nein, wenn Sie Anrufe richtig heißt free() für Speicher mit malloc() und delete mit new zugeordnet für Speicher zugewiesen übereinstimmen, wird es funktionieren.

Andere Tipps

Was Sie tun, ist richtig. Eine Klasse, die mit new wird ausgeplant hat deleteed, werden soll, aber wenn es Speicher besitzt, der mit malloc (entweder direkt oder indirekt) zugewiesen wurde, dann sollte es, dass der Speicher mit free freigeben.

Ihre Implementierung ist richtig. Sie verwenden free () Speicher mit malloc freizugeben () (oder strdup ()), und das ist genau das, was zu tun ist.

Die Voraussetzung ist, dass Sie Speicher freigeben mit einem primitiven den einer Anpassung verwendet, um diesen Speicher zuweisen. Und diese Forderung in Ihrer Implementierung erfüllt werden.

ich herausgefunden, was falsch war. Ich vorging mein Objekt als Kopie durch ein Verfahren, und es hielt die char* über; wenn die Funktion verlassen, wurde das temporäre Objekt gelöscht, die char* zu befreien. Jetzt muss ich die char* nach der Methode verlassen, aber das ist jetzt weg. Zwei * ist und minus eins fixiert es.

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