dynamische variable mit funktion erstellen und löschen - ungültiger zeiger
-
Hi,
wenn ich folgendes Programm ausführe bekomme ich sowas wie: glibc detected invalid pointer free()...und dann noch so eine unübersichtliche memory map...
#include <iostream> using namespace std; void erzeuge_int (int*); void loesche (*int*); int main (void) { int zahl; int *zeiger; zeiger = &zahl; // ... erzeuge_int (zeiger); *zeiger = 159; // ... loeschen (zeiger); return 0; } void erzeuge_int (int *ptr) { ptr = new(nothrow) int; } void loeschen (int *del) { delete del; }Woran liegt das?
Ich hab das jetzt absichtlich nicht über einen möglichen rückgabewert von erzeuge_int gemacht, sondern wollte das mal so testen...soll das nicht funktionieren?
Achso, und wenn ich die variable weglasse und den zeiger direkt mit int *zeiger = 0; initialisiere, krieg ich als fehlermeldung "segmentation fault"...?!
-
Bei delete zeigt 'zeiger' noch immer auf 'zahl', weil 'erzeuge_int' diesen nicht ändert.
-
und wie muss man das hier ändern, damit zeiger die adresse von ptr übernimmt. ist das überhaupt möglich, oder muss ich das via return machen?!
-
void erzeuge_int (int **ptr) { *ptr = new(nothrow) int; }
-
TyRoXx schrieb:
void erzeuge_int (int **ptr) { *ptr = new(nothrow) int; }dann ändert sich der aufruf aber auch
außerdem könnte man hier auch ne ref auf nen ptr nehmen... dann kommt gar niemand auch niemand auf die idee, 0 zu übergeben...
für nothrow muss man btw den header new includierenbb