Invalider Pointer
-
hey zusammen,
warum ist der Pointer laut Debugger invalide?//Vorberechnungen i=(gesSpeicher/schrittGroesse); i=i+1; //Dynamisches Anlegen von Speicher while(1) { (gdb) break sleep(taktLaenge); if(i>0) { speicher=realloc(speicher,schrittGroesse*i); } else if(i==0) { speicher=realloc(speicher,gesSpeicher); } i--; } free(speicher);
-
Was wird denn vorher mit speicher gemacht. Ich hoffe das ist der Pointer den du meinst, denn alle Informationen über die Variablen fehlen
-
oh sorry,
speicher wird nur vorher mit
int* speicher;
initialisiert.
-
Dann zeigt speicher auf irgendeinen Bereich.
realloc möchte als 1. Paramter aber einen Zeiger auf einen mit malloc beschafften Speicherbereich haben (oder NULL).
http://www.cplusplus.com/reference/cstdlib/realloc/
-
Also wird er nicht intialisiert, und das ist auch genau dein Problem. Meintest du
int *speicher = NULL;
?
Im Übrigen sind reallocs der Form
foo = realloc(foo, newsize);
eine gefährliche Sache, weil Fehlerbehandlung so stumpf nicht stattfinden kann. Und Fehlerbehandlung einfach sein zu lassen, weil sie mühsam ist, hat mit guter Programmierung natürlich nichts zu tun.
-
ich wollte nicht das ganze programm posten.
also im gesSpeicher ist die gesamt Größe des zu allokierenden Speicher
schrittGroesse gibt die Groesse der einzelnen schritte in den allokiert werden soll.
i müsste klar seintaktLaenge gibt nur an wie lange das Programm anhält bevor es das nächste mall allokiert.
speicher ist halt der pointer.
-
daniev schrieb:
oh sorry,
speicher wird nur vorher mit
int* speicher;
initialisiert.
Das ist nur eine Definition.
Initialisieren bedeutet einen ersten Wert zuweisen
Etwa:int* speicher = NULL;
-
habe ich nicht gemacht gehabt und jetzt nachgeholt, aber es bleibt dabei das der gdb das sagt.
woran kann das liegen?
-
anscheinend klappt das doch -.-*
dankewie kann ich denn dann das signalhandling machen zum beenden über ctrl+c?
habe das schon versucht aber dann wird immer gesagt das halt in der methode die pointer nicht deklariert wurden etc.