Schnetze schrieb:
(initialisiere und free das dynamisch erzeugte Feld), aber der Test 2 (hänge hinten ein Element ran und lösche das letzte Element) failed, weil angeblich die initialisierung [..]
malloc() reserviert Speicher, free() gibt diesen wieder frei. Die Funktionen machen nur im Tandem Sinn.
dat ist dein Zeiger für den Array, der je nach Bedarf immer neu erzeugt werden muss.
"
Vergrößern" oder
"Verkleinern" ist bloß eine Metapher, die im Computer nicht existiert. Du erstellst immer einen neuen array der größer ist oder kleiner, wenn angebracht. Die vorhanden Werte des alten kopierst du einfach in den neuen. Das ist im wesentlich alles, worum es bei einem Vektor/ArrayList/Dynamischen Array eigentlich geht. Dazu musst du natürlich jedes Mal Speicher für den neuen Array reservieren bzw den Speicherbereich, den du für den alten verwendet hast wieder freigeben (mit free()).
Darum geht es in dieser Aufgabe. Es macht wenig Sinn, sich hier durchzutasten, wenn man nicht schon vorher weiß, worum es prinzipiell geht. Der Sinn der Aufgabe ist es dir zu zeigen wie Speicherverwaltung in C funktioniert, dazu musst du die Grundkonzepte verstanden haben. Das sehe ich bei dir nicht.
Dein Fehler ist also, das du eine sinnlose Operation durchgeführt hast. Du hast wenn du einen Zeiger deklarierst erstmal einen zufälligen Wert für die Speicheradresse drinstehen, was gefährlich ist, deshalb muss er mit NULL initialisiert werden.
DANACH kannst du dem Zeiger einen reservierten Speicherbereich mit malloc() zuteilen und mit free() gibst du den Speicherbereich wieder frei, wenn der array weg kann.
Wenn das für dich böhmische Dörfer sind, empfehle ich dir die Konzepte nachzuholen. Die Aufgabe setzt das voraus oder ist einfach didaktisch schlecht aufgebaut sonst.