malloc, calloc, realloc

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • malloc, calloc, realloc

    Hallo C Programierer,

    Ich habe da mal ein paar verständiniss Fragen zu malloc calloc realloc.

    Also folgendes:

    malloc: gibt einen void Zeiger auf den Anfangsbereich des allozierten Speichers zurück der Speicher wird auf dem Heap alloziert und ist bei allozierung ohne Wert also nicht initaliesiert

    calloc: funktioniert wie malloc nur kann man bei calloc angeben wie viel Speicher für wie viel Element freigegeben werden soll außerdem wird jeder Speicherbereich mit 0 initialsiert

    realloc: gibt vorher mit malloc oder calloc erstellten speicher wieder frei und erweitert diesen.


    ist das soweit richtig ?

    Als nächstes bin ich mir nicht sicher ob ich bisher malloc richtig genutzt habe. Also angenommen ich möchte ein Dynamisches Array erstellen so habe ich das immer so getan:

    Quellcode

    1. int* a =(int*)malloc(sizeof(int));

    hat bisher auch so funktioniert zumindest hatt mein Programm getan was es sollte und auch der Compiler hatte nichts einzuwenden.
    Aber lege ich so nicht nur speicher für einen int Wert an ?
    Also müsste man das so machen :

    Quellcode

    1. int size = 5;
    2. int* a= (int*)malloc(size*sizeof(int));
    3. while(1)
    4. {
    5. /* Hier wird irgenwas eingegeben*/
    6. if(eingabe >= size)
    7. { /*Hier wird der Speicher erweitert wenn die Eingabe größer wird*/
    8. size+=size;
    9. a=(int*)realloc(a,size*sizeof(int));
    10. }
    11. }
    Alles anzeigen


    Was von beiden ist denn nun richtig? Wenn oberes Falsch ist wäre es interessant zu wissen wieso es die ganze Zeit funktioniert hat ??
    oder ist es das selbe???

    PS: new und delete ist in C++ das selbe wie malloc in c richtig ?
  • Mit realloc() ist es noch einfacher, z. B. dynamische Arrays zu programmieren. Die Anfangsadresse des dynamischen Arrays ist diejenige, auf die der Zeiger (zgr) zeigt. Der Parameter neuegroesse dient dazu, einen bereits zuvor allozierten Speicherplatz auf neuegroesse Bytes zu vergrößern. Die Funktion realloc() ermöglicht es auch, den Speicherplatz zu verkleinern. Dazu wird einfach der hintere Teil des Speicherblocks freigegeben, während der vordere Teil unverändert bleibt. Bei einer Vergrößerung des Speicherplatzes mit realloc() behält der vordere Teil auf jeden Fall seinen Wert, und der neue Teil wird einfach hinten angehängt. Dieser angehängte Wert ist aber wie bei malloc() undefiniert. Hier sehen Sie ein kleines Beispiel dafür, wie ein Array mit der Funktion realloc() dynamisch erstellt wird: [quelle]

    Also ist es wohl besser realloc zu nutzen, beispiel ist unter dem Link auch zu sehen
    MfG ShureG

    There are 10 kinds of people. Those who understand binary notation, and those who do not.