Undefined reference

Du darfst nicht einfach auf das IntArray mit [] zugreifen. Du musst auf den reservierten Speicher mit [] zugreifen.
C++:
array->speicher[10];

Sagt er dir ja auch in der Fehlermeldung: Wenn du [] auf ein IntArray anwendest bekommst du auch ein IntArray zurück und kein int.

Lg
 
So konnte nun die anderen Funktionen erstellen, ich habe nur noch eine Frage zu free. Wenn ich eine neue Funktion erstelle und mit free(array->start) den Speicher freigebe reicht das? Oder muss ich durch jeden Index durchgehen und alles freigeben?

Also mit free(array->start) werden nur die ersten beiden Adressen freigegeben und nicht die alle.
 
Zuletzt bearbeitet:
Nein, mit free() wird der gesamte Speicher, auf den der Zeiger zeigt, wieder freigegeben. Also soviel wie du mit malloc() reserviert hast, wird von free() dann auch wieder freigegeben.

Lg
 
Dann müsste das ja heißen im meinem Fall würde free(array->start) reichen oder? Jedoch wie gesagt sind dann nur die ersten beiden Adressen freigegeben.
 
Ich hab einfach nach dem Funktionsaufruf nochmal die Speicheradressen der Arraywerte abgefragt und da stand noch der Wert drin den ich reingespeichert habe (jedoch nur bei den ersten beide nicht). Daher kommt meine Annahme das es halt nicht ganz freigegeben wird.
 
Nein, wenn du denn Speicher freigibst werden die Werte in den Speicherzellen nicht geändert (wäre ja nur unnötiger Aufwand). Die ersten beiden Werte wurden also durch etwas Anderes geändert.

Lg
 
Achso, also die Werte bleiben solange vorhanden bis sie überschrieben werden, aber durch free sind sie quasie zum Überschreiben freigegeben. Dachte der würde alles löschen.
 
Genau, free() gibt den reservierten Speicher wieder frei, das bedeutet andere Programme können beispielsweise mit einem malloc() diesen Speicher für sich wieder reservieren. Die Werte bleiben gleich, sie werden nicht überschrieben, das wäre ja nur ein unnötiger Aufwand für den Computer.
Und Löschen könnte man die Werte sowieso nicht, da ja immer etwas in der Speicherzelle steht.

Lg
 
Zurück