PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : calloc, realloc auf dem Palm



farion
27-05-2007, 18:09
Hallo,

ich programmiere gerade für meinem Palm in C

Ich lade zur Laufzeit einen Datenbestand ein und dieser kann sich auch ändern und muss dann neu eingelesen werden. Die Daten sind ein struct der Form:

typedef struct DBRecordType
{
char a[20];
char b[20];
Int16 c;
} DBRecordType;

Am Anfang lade ich sagen wir 10 Element und später sind es 20, also muss ich mein Array vergrössern.
"new" geht ja leider nicht, also habe ich mich mal mit calloc und realloc beschäftigt, aber das tut nicht so wie ich gerne möchte.


DBRecordType*daten;
...
UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
int size = 10;
daten= (DBRecordType*)calloc(size ,sizeof(DBRecordType));

...
size=20;
daten= (int *)realloc(daten, size*sizeof(DBRecordType));));
...
free(DBRecordType);
return 0
}

Das ist glaube ich bisschen naiv - oder. Ich habe es auch mit einzelnen Arrays probiert (also 2x char und 1x int) aber da kriege ichs auch nicht hin.

Gruss far

peschmae
27-05-2007, 20:49
Abgesehen davon dass der Cast beim realloc natürlich nicht passt (und ein )); auf der Zeile zuviel ist - Kopierfehler nehme ich an) sieht das ganz ok aus.

Fehlerbehandlung nicht vergessen - insbesondere im realloc-Fall (wenn das fehlschlägt kriegst du 0 als return Value, aber der vorher angelegte Speicherbereich bleibt bestehen - d.h. den musst du natürlich noch irgendwie loswerden.)
Aber das ist eh ein Sonderfall - die meiste Zeit des Tages geht das ganz gut (d.h. das sollte erst mal funktionieren) ;)

Was geht denn nicht?

MfG Peschmä