Software > Coding
Abfrage freier Speicher / TOS 2.06
simonsunnyboy:
Letzteres macht mehr Sinn, da Malloc ja generell Speicher hergibt, ohne zu sagen, daß er longs enthält.
Deswegen bekommst Du erst einen void * vom Malloc. Dein pointer würde dann auf den Typ zeigen, den Du da abspeichern möchtest. Für deine reine Zählung reichts es den bei void * zu belassen.
Aber stell Dir vor, du möchtest den Speicherplatz für ein Degasbild allozieren:
--- Code: ---struct Degasbild
{
uint16_t res;
uint16_t palette[16];
uint8_t daten[32000];
};
struct Degasbild * meinBild;
meinBild = (struct Degasbild *) Malloc(sizeof(struct Degasbild));
--- Ende Code ---
Du hast einen Zeiger auf die Daten mit Struktur Degasbild. Dann lässt Du dir von Malloc genausoviel Platz geben, Malloc weiss aber nichts, welche Struktur das haben wird. Deswegen transformierst Du den void * den Malloc Dir eigentlich gibt, explizit über den Cast auf einen Pointer auf das Bild.
HamSTer:
klasse 8)
Das macht sicher die Pflege von solcherlei Programmen leichter. Neue Anforderungen an das Bildformat oder andere Dinge müssen lediglich in der Struktur angepasst werden.
simonsunnyboy:
Genau und damit hast Du auch schon mit einfachem C einen Schritt Richtung Objektorientierung.
Das funktioniert natürlich auch mit allen möglichen Daten.
rainers:
Hallo HamSTer,
danke für Dein Code-Beispiel. Hab's mir mal geklaut und wurstel das nach Pascal um.
-R.
HamSTer:
in dem ATOS C-Kurs ist ein Projektbeispiel
--- Code: ---#ifdef __TURBOC__
#include <tos.h>
#else
#ifdef __GNUC__
#include <osbind.h>
#else
#include <tosbind.h>
#endif
#endif
typedef struct cookie_entry {
union {
unsigned long name_long;
char name_array[4];
} name;
unsigned long value;
} CookieEntry;
int main(void)
{ CookieEntry **CookieJarPtr, *CookieJar;
long OldStack;
OldStack=Super(0L);
CookieJarPtr = (CookieEntry**)0x5a0L;
CookieJar=*CookieJarPtr;
Super((void *)OldStack);
return 0;
}
--- Ende Code ---
CookieJarPtr , ist demnach Verweis auf Verweis
Wie tief kann sowas gehen?
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln