Löschen eines char**
-
Da habe ich aber gleich noch eine Frage dazu. Ich habe eine DLL die eine Funktion exportiert die ein array mit Strings zurückgeben soll.Bei der exportfunktion kann ich ja nun nur reines C zurückgeben. Sprich mein String array muss nun ein char** sein. Wenn ich nun in der Exportfunktion den Speicher anlege sollte ich diesen nun auch wieder in der DLL löschen. Sonst erhalte ich den beschriebenen Fehler. Also benötige ich eine zusätzliche Exportfuktion die den Speicher wieder frei gibt. Damit ich den angelegten Speicher wieder in der zu löschenden Exportfunktion zur Verfügung habe muss ich den Zeiger darauf global anlegen. Was mir weniger gefällt. Gibt es da eine bessere Lösung?
-
Nö! Du übergibst an die Funktion , die den Speciher wieder freigeben soll, den Zeiger auf Deinen Aray und die Anzahl der Einträge. Genau was Du ach zurückgebn musst!
-
Auch ne Möglichkeit. Ist das die bessere? Oder nur ne Alternative?
-
Mach einfach eine Funktion xxx_new, die den Speicher anfordert, und eine xxx_delete, die ihn wieder freigibt. Den von xxx_new zurückgegebenen Zeiger kannst du dann xxx_delete übergeben und damit delete[] ausführen...
-
Mach einfach eine Funktion xxx_new, die den Speicher anfordert, und eine xxx_delete, die ihn wieder freigibt. Den von xxx_new zurückgegebenen Zeiger kannst du dann xxx_delete übergeben und damit delete[] ausführen..
Das hat Martin Richter ja schon geschrieben. Habe ich schon verstanden. Wollte aber wissen ob die Übergabe besser sei als ne globale Variable oder nur eine alternative?
-
tanztderbär schrieb:
Mach einfach eine Funktion xxx_new, die den Speicher anfordert, und eine xxx_delete, die ihn wieder freigibt. Den von xxx_new zurückgegebenen Zeiger kannst du dann xxx_delete übergeben und damit delete[] ausführen..
Das hat Martin Richter ja schon geschrieben. Habe ich schon verstanden. Wollte aber wissen ob die Übergabe besser sei als ne globale Variable oder nur eine alternative?
Ja, ist sicher die bessere Variante. Mit der Globalen wirst du wohl Probleme bekommen, wenn du deine xxx_new-Funktion mehr als einmal aufrufst.
-
Mit der Globalen wirst du wohl Probleme bekommen, wenn du deine xxx_new-Funktion mehr als einmal aufrufst.
Das habe ich dadurch abgefangen, dass wenn die Globale variable ungleich Null ist, dass ich diese Zurückgebe und keine neue anlege.
Trotzdem die bessere alternative?
-
tanztderbär schrieb:
Mit der Globalen wirst du wohl Probleme bekommen, wenn du deine xxx_new-Funktion mehr als einmal aufrufst.
Das habe ich dadurch abgefangen, dass wenn die Globale variable ungleich Null ist, dass ich diese Zurückgebe und keine neue anlege.
Trotzdem die bessere alternative?
Ja, weil du dir so die Möglichkeit schaffst, die Funktion (sinnvoll) mehrfach aufzurufen. Ob das für deinen speziellen Fall was bringt, weiß ich natürlich nicht. In vielen Fällen jedenfalls schon. Außerdem sind Globale meist schlechter Stil oder sogar potenziell kritisch (wie in deinem Beispiel) und sollten generell vermieden werden (Ausnahmen bestätigen natürlich die Regel
).EDIT: Wieso hängst du eigentlich so an deiner Globalen?

-
Jo häng eigentlich gar nicht dran habe es sogar schon geändert. Wollte nur wissen was besser ist.
Danke.
-
Hallo,
Wieso hängst du _matze schrieb:
Wieso hängst du eigentlich so an deiner Globalen?
Diese Frage im Zeitalter der Globalisierung?
SCNR..MfG,
Probe-Nutzer