Speicherverwaltung



  • Hi, ich habe ein kleines Problem.

    int i*=NULL;
    i=(int*)malloc(1000*sizeof(int));
    

    Dabei bekomme ich doch Probleme, da ich ab 0x00000000 mir den Speicher hole oder?
    Und würde mit new das gleiche Problem auftreten?



  • daishi schrieb:

    Dabei bekomme ich doch Probleme, da ich ab 0x00000000 mir den Speicher hole oder?
    Und würde mit new das gleiche Problem auftreten?

    Wie kommst du darauf, dass der Speicher "ab 0" geholt wird? Du musst den Ausdruck einfach mal logisch auseinandernehmen.

    Rechte Seite: Ein Funktionsaufruf. malloc besorgt dir einen Speicherblock, und gibt einen Pointer darauf zurück.

    Linke Seite: Eine Pointer-Variable.

    Mitte: Zuweisung. Der Rückgabewert von malloc wird dem Pointer zugewiesen.

    Nirgends wird hier irgendwem gesagt, woher der Speicher geholt werden soll (das ist allein mallocs Angelegenheit), nur wie groß der Block sein soll. Der alte Wert von i wird genauso überschrieben wie wenn es sowas wär: int i = 42; i = 2 + 2;

    Mit new tritt das Problem ebenfalls nicht auf.



  • Danke, ich habe es auch gerade in der MSDN gelesen, dort war es nur etwas undeutlich für schnelles lesen geschrieben.
    "malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. ..."



  • btw:
    Man sollte den Rückgabewert von malloc nicht casten.
    In C++ nimmt man new und in C ist der Cast überflüssig.


Anmelden zum Antworten