Designfrage: Verkettete Funktionen und malloc

17/02/2011 - 20:55 von Andreas Lemke | Report spam
Hallo an die Leser.

Für folgendes Problem fàllt mir bisher keine effiziente / stilvolle Lösung
ein:

Gegeben sind zwei Funktionen

char *foo(char *str);
char *bar(char *str);

Beide erhalten einen char* als Parameter und liefern einen neuen char*
zurück. Da die Lànge des Rückgabewertes dynamisch ist und erst zur
Laufzeit feststeht, wird innerhalb der Funktion via calloc der notwendige
Speicher vom Heap allokiert. Dieser làsst sich dann außerhalb mittels free
(Rückgabewert) auch wieder freigeben.

Wenn ich nun beide Funktionen verketten möchte zu:

char *result = bar(foo(str));

stehe ich vor dem Problem, dass ich keinen Zugriff mehr auf den von foo()
allokierten Speicher habe. Dessen Inhalt interessiert mich auch nicht,
aber ohne free() auf den Rückgabewert von foo() habe ich ein MemLeak.

Eine Lösung wàre, die Funktionen getrennt hintereinander aufzurufen, um
ihre Rückgabewerte in der Hand zu haben, aber eleganter wàre schon die
Verkettung.

Gibt es eventuell eine einfache Lösung für mein Problem?

Viele Grüße

Andreas
 

Lesen sie die antworten

#1 Georg Bauhaus
17/02/2011 - 21:41 | Warnen spam
On 2/17/11 8:55 PM, Andreas Lemke wrote:
wird innerhalb der Funktion via calloc der notwendige
Speicher vom Heap allokiert. Dieser làsst sich dann außerhalb mittels free
(Rückgabewert) auch wieder freigeben.



Eine Lösung wàre, die Funktionen getrennt hintereinander aufzurufen, um
ihre Rückgabewerte in der Hand zu haben, aber eleganter wàre schon die
Verkettung.



Der autorelease-Mechanismus von Objective-C bietet eine Handhabe
für etwas fast gleiches. Es sollte möglich sein, das zu kopieren.

Die einfache Lösung für den Einzelfall wàre für mich,
michvonderideefreizumachen, jedenfalls in C,
dassverschachteltemathematisierendeausdrucksweisen wegen
oberflàchlicher Eleganz (Gewohnheit?) technische und
pragmatische Vorteile hàtten (so wie vielleicht -- deswegen
die obigen exemplarischen Unworte -- Vielleser beim
Schreiben der Zusammenschreibung den Vorzug geben). Beim
C Programmieren kann ich mir fachspezifische Vorteile
überlegen, wenn ein Problem gelöst werden muss, das nicht in
erster Linie mit Schreibweisen zu tun hat, sondern mit
Zeigern. ;-)

Ähnliche fragen