Du hast nirgendwo einen Pointer deklariert, die Funktionen wollen aber einen verwenden.
Zwar sind in der Tat am Atari 32Bit Zahlen auch gleichzeitig Adressen und pointer, aber C unterscheidet da. Und das ist auch richtig so, damit der Programmier auch weiß, womit er arbeitet.
Ein Zeiger auf einen Speicherbereich ist in C immer zweigeteilt, einmal der Pointer selbst, dargestellt durch * und einmal der Typ der Daten, auf die der Pointer zeigt.
Nimm an, du hast im Speicher tolle Zeichen liegen, die als char abgespeichert sind.
Dann kannst du in einem "Pointer auf char" die Startadresse dieser tollen Zeichen ablegen.
char meinZeichen = 'z';
char *ptr_auf_meinZeichen = &meinZeichen; /* definiere "pointer auf char"und gibt ihm die Speicheradresse von meinZeichen */
Malloc und co wissen nicht, welcher Typ dahinter liegt, deswegen geben sie normalerweise einen "void Pointer" zurück. Den muss man dann zur Verwendung auf die Art der Daten casten, auf die man dann zugreifen möchte.
void *speicher;
char *ptr_auf_zeichen;
speicher = malloc(50000); /* wir holen uns mal Speicher */
ptr_auf_zeichen = (char *)speicher; /* in diesem Speicher liegen in Zukunft chars */
*ptr_auf_zeichen = 'A'; /* ein großes A in diesem Speicher ablegen*/
ptr_auf_zeichen++; /* und auf die nächste Stelle zeigen lassen...*/
Vorschlag: Arbeite Dich bitte in ein sauberes und modernes C Tutorial auf dem PC ein. Wenn das sitzt, kann man das Wissen auf den Atari anwenden. Umgekehrt läuft man Gefahr, uralte C Dialekte zu verwenden und z.B. solche Fallen, wo aus Faulheit Adressen als long deklariert werden, weiterzuverwenden.