free mit variabler Argumentliste. Richtiges C?

13/03/2009 - 09:29 von Jochen Hub | Report spam
Hi,

ist das (garantiert) richtiges C? Ich moechte zeilenlange
free-Ausdruecke vermeiden:

void free2(void *a,...)
{
va_list arg_ptr;
void *array;

va_start(arg_ptr,a);
sfree(a);

while ( (array = va_arg(arg_ptr, void*)) != 0)
free(array);
va_end(arg_ptr);
}

was dann verwendet werden soll mit Aufrufen wie:

...
free2(a,b,c,NULL);
...

a,b,c sollen pointer (beliebigen Typs) sein, fuer die vorher mit
malloc/calloc Speicher gesammelt wurde.

Wenn ich stattdessen

free2(a,b,c,0);

verwende, bekomme ich uebrigens einen Segfault...

Ist das nun korrekt?

Danke,
Jochen
 

Lesen sie die antworten

#1 Jochen Hub
13/03/2009 - 09:40 | Warnen spam
Jochen Hub wrote:
Hi,

ist das (garantiert) richtiges C? Ich moechte zeilenlange
free-Ausdruecke vermeiden:

void free2(void *a,...)
{
va_list arg_ptr;
void *array;

va_start(arg_ptr,a);
sfree(a);


^^^^^^^^
das hier sollte natuerlich free(a) heissen.


while ( (array = va_arg(arg_ptr, void*)) != 0)
free(array);
va_end(arg_ptr);
}

was dann verwendet werden soll mit Aufrufen wie:

...
free2(a,b,c,NULL);
...

a,b,c sollen pointer (beliebigen Typs) sein, fuer die vorher mit
malloc/calloc Speicher gesammelt wurde.

Wenn ich stattdessen

free2(a,b,c,0);

verwende, bekomme ich uebrigens einen Segfault...

Ist das nun korrekt?

Danke,
Jochen

Ähnliche fragen