[C] Speicherverwaltung

Analog zu dem:

Code:
void testfunc(int a)
{
  a += 10;
  printf("%i\n",a);
}

int main( )
{
  int a = 10;
  printf("%i\n",a);
  testfunc(a);
  printf("%i\n",a);

  return 0;
}

Die Ausgabe wird sein:

10
20
10

weil testfunc a überhaupt nicht ändern kann. Analog, nur eben mit einem Zeiger, verhält es sich bei deinem Bsp.

Ps.: Ich sehe gerade das Squeaker das auf seine Weise mit dem Pointer zurückgeben gelöst hat, in dem Fall geht es natürlich wenn man mit test in der main den zurückgegebenen Wert übernimmt. Mein Fehler, sorry.
 
Zuletzt bearbeitet:
Original geschrieben von Dudadida
Ähm, wenn ich mich jetzt nicht total irre, kann es aber nur reines Glück sein, dass die Funktion funktioniert, nämlich weil realloc den Anfang des reservierten Speicherbereichs nicht ändert, dürfte es aber prinzipiell tun.
Guckt mal, myfunk erhält einen Zeiger als Wert(!)parameter und ändert die Adresse auf die er zeigt. MyFunk weiß doch gar nicht an welcher Adresse die neue Adresse stehen soll (soll heißen kennt die Adresse von test aus main nicht und kann die mit realloc geholte neue Adresse nicht abspeichern), die Funktion brauch einen Referenzparameter!

siehe oben. test muss von myfunc zurückgeschrieben werden, sonst geht es u.u. nicht.
 
Referenz und Pointer, da kann man doch ne Pointer weglassen. Doppelt hält zwar besser, ist aber unnötig!
 
Eben nicht! Nicht wenn man die Adresse ändert auf die der Pointer zeigt den man übergibt. Du musst da ein bisschen um die Ecke denken: Du ermittelst eine Adresse die an einer Adresse gespeichert wird. Letztere ist der Funktion aber ohne die Referenz nicht bekannt. Du kannst zwar ohne den Referenzparameter auf den Speicher zugreifen, auf den der Zeiger zeigt, du kannst den Zeiger aber nicht umsetzen.
 
Zurück