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 sein

    taktLaenge 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 -.-*
    danke

    wie 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.


Anmelden zum Antworten