C Dynamische Speicherzuweisung Mit malloc (), calloc (), free () und realloc ()

In diesem Tutorial lernen Sie, den Speicher in Ihrem C-Programm mithilfe der Standardbibliotheksfunktionen dynamisch zuzuweisen: malloc (), calloc (), free () und realloc ().

Wie Sie wissen, ist ein Array eine Sammlung einer festen Anzahl von Werten. Sobald die Größe eines Arrays deklariert ist, können Sie sie nicht mehr ändern.

Manchmal ist die Größe des von Ihnen deklarierten Arrays nicht ausreichend. Um dieses Problem zu beheben, können Sie den Speicher zur Laufzeit manuell zuweisen. Dies wird in der C-Programmierung als dynamische Speicherzuordnung bezeichnet.

Um Speicher dynamisch zuweisen, Bibliotheksfunktionen sind malloc(), calloc(), realloc()und free()verwendet werden. Diese Funktionen sind in der Header-Datei definiert.

C malloc ()

Der Name "malloc" steht für Speicherzuordnung.

Die malloc()Funktion reserviert einen Speicherblock mit der angegebenen Anzahl von Bytes. Und es gibt einen Zeiger zurück, der voidin Zeiger beliebiger Form umgewandelt werden kann.

Syntax von malloc ()

 ptr = (castType*) malloc(size);

Beispiel

 ptr = (float*) malloc(100 * sizeof(float));

Die obige Anweisung weist 400 Bytes Speicher zu. Es ist, weil die Größe von float4 Bytes ist. Und der Zeiger ptr enthält die Adresse des ersten Bytes im zugewiesenen Speicher.

Der Ausdruck führt zu einem NULLZeiger, wenn der Speicher nicht zugeordnet werden kann.

C calloc ()

Der Name "calloc" steht für zusammenhängende Zuordnung.

Die malloc()Funktion reserviert Speicher und lässt den Speicher nicht initialisiert. Während die calloc()Funktion Speicher zuweist und alle Bits auf Null initialisiert.

Syntax von calloc ()

 ptr = (castType*)calloc(n, size);

Beispiel:

 ptr = (float*) calloc(25, sizeof(float));

Die obige Anweisung weist 25 Elementen des Typs zusammenhängenden Speicherplatz im Speicher zu float.

C frei ()

Dynamisch zugewiesener Speicher, der entweder erstellt wurde calloc()oder malloc()nicht selbst freigegeben wird. Sie müssen explizit verwenden free(), um den Speicherplatz freizugeben.

Syntax von free ()

 free(ptr);

Diese Anweisung gibt den im Speicher zugewiesenen Speicherplatz frei, auf den verwiesen wird ptr.

Beispiel 1: malloc () und free ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; printf("Enter number of elements: "); scanf("%d", &n); ptr = (int*) malloc(n * sizeof(int)); // if memory cannot be allocated if(ptr == NULL) ( printf("Error! memory not allocated."); exit(0); ) printf("Enter elements: "); for(i = 0; i < n; ++i) ( scanf("%d", ptr + i); sum += *(ptr + i); ) printf("Sum = %d", sum); // deallocating the memory free(ptr); return 0; ) 

Hier haben wir den Speicher für n Anzahl von dynamisch zugewiesen int.

Beispiel 2: calloc () und free ()

 // Program to calculate the sum of n numbers entered by the user #include #include int main() ( int n, i, *ptr, sum = 0; printf("Enter number of elements: "); scanf("%d", &n); ptr = (int*) calloc(n, sizeof(int)); if(ptr == NULL) ( printf("Error! memory not allocated."); exit(0); ) printf("Enter elements: "); for(i = 0; i < n; ++i) ( scanf("%d", ptr + i); sum += *(ptr + i); ) printf("Sum = %d", sum); free(ptr); return 0; ) 

C realloc ()

Wenn der dynamisch zugewiesene Speicher nicht ausreicht oder mehr als erforderlich ist, können Sie die Größe des zuvor zugewiesenen Speichers mithilfe der realloc()Funktion ändern .

Syntax von realloc ()

 ptr = realloc(ptr, x);

Hier wird ptr mit einer neuen Größe x neu zugewiesen.

Beispiel 3: realloc ()

 #include #include int main() ( int *ptr, i , n1, n2; printf("Enter size: "); scanf("%d", &n1); ptr = (int*) malloc(n1 * sizeof(int)); printf("Addresses of previously allocated memory: "); for(i = 0; i < n1; ++i) printf("%u",ptr + i); printf("Enter the new size: "); scanf("%d", &n2); // rellocating the memory ptr = realloc(ptr, n2 * sizeof(int)); printf("Addresses of newly allocated memory: "); for(i = 0; i < n2; ++i) printf("%u", ptr + i); free(ptr); return 0; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Größe eingeben: 2 Adressen des zuvor zugewiesenen Speichers: 26855472 26855476 Geben Sie die neue Größe ein: 4 Adressen des neu zugewiesenen Speichers: 26855472 26855476 26855480 26855484

Interessante Beiträge...