?
Hi Bruder !
Die Verwendung von free und malloc ist soweit ok,
aber das Casten von malloc ist in C nicht nötig.
Du benutzst einen Zeiger auf eine Struktur, für die es keinen Speicherplatz gibt.
Das würde an der Stelle obj->ID = id; einen Crash geben, wenn
deine Struktur den member ID hätte.
Deine Struktur hat keinen ID member, sondern id.
Wozu soll eigentlich unsigned short *optr in Fct1 gut sein ?
Du solltest den Rückgabewert von malloc prüfen, es kann auch mal ein NULL zurückkommen.
Spendier doch für Fct1 einen Rückgabewert, über den sich der Erfolg von malloc prüfen lässt und pack doch size ( hier n ) auch gleich mit in die Parameterliste:
int Fct1( unsigned short **id, unsigned n )
{
if( NULL == ( *id = malloc( n * sizeof(unsigned short))))
return 1;
return 0;
}
struct Object
{
unsigned short *id;
};
int main()
{
struct Object obj = {0};
unsigned n = 10, i;
if ( Fct1( &obj.id, n ) )
{
puts( "Out of memory." );
return 1;
}
for ( i = 0; i<n; i++ )
{
obj.id[i] = i;
printf( "%hd", obj.id[i] );
}
free(obj.id);
return 0;
}