C Dynamische Speicherzuweisung
C Dynamische Speicherzuweisung
In diesem Tutorial lernen Sie, Speicher in Ihrem C-Programm mithilfe von 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 reicht die Größe des deklarierten Arrays möglicherweise nicht aus. Um dieses Problem zu lösen, können Sie Speicher während der Laufzeit manuell zuweisen. Dies wird in der C-Programmierung als dynamische Speicherzuweisung bezeichnet.
Um Speicher dynamisch zuzuweisen, sind Bibliotheksfunktionen malloc()
, calloc()
, realloc()
und free()
werden verwendet. Diese Funktionen sind in <stdlib.h>
definiert Header-Datei.
C malloc()
Der Name "malloc" steht für Memory Allocation.
Die malloc()
Funktion reserviert einen Speicherblock mit der angegebenen Anzahl von Bytes. Und es gibt einen Zeiger von void
zurück die in Zeiger beliebiger Form umgewandelt werden können.
Syntax von malloc()
ptr = (castType*) malloc(size);
Beispiel
ptr = (float*) malloc(100 * sizeof(float));
Die obige Anweisung weist 400 Byte Speicher zu. Das liegt an der Größe von float
ist 4 Byte. Und der Zeiger ptr enthält die Adresse des ersten Bytes im zugewiesenen Speicher.
Der Ausdruck ergibt ein NULL
Zeiger, wenn der Speicher nicht zugewiesen werden kann.
C-calloc()
Der Name "calloc" steht für Contiguous Allocation.
Die malloc()
-Funktion weist Speicher zu und lässt den Speicher uninitialisiert, wohingegen die calloc()
Funktion weist Speicher zu und initialisiert alle Bits auf Null.
Syntax von calloc()
ptr = (castType*)calloc(n, size);
Beispiel:
ptr = (float*) calloc(25, sizeof(float));
Die obige Anweisung weist zusammenhängenden Speicherplatz für 25 Elemente des Typs float
zu .
C-frei()
Dynamisch zugewiesener Speicher, der entweder mit calloc()
erstellt wurde oder malloc()
wird nicht von alleine befreit. Sie müssen ausdrücklich free()
verwenden um das Leerzeichen freizugeben.
Syntax von free()
free(ptr);
Diese Anweisung gibt den Speicherplatz frei, der im Speicher zugewiesen ist, auf den ptr
zeigt .
Beispiel 1:malloc() und free()
// Program to calculate the sum of n numbers entered by the user
#include <stdio.h>
#include <stdlib.h>
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;
}
Ausgabe
Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156
Hier haben wir den Speicher für n dynamisch zugewiesen Anzahl von int
.
Beispiel 2:calloc() und free()
// Program to calculate the sum of n numbers entered by the user
#include <stdio.h>
#include <stdlib.h>
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;
}
Ausgabe
Enter number of elements: 3
Enter elements: 100
20
36
Sum = 156
C realloc()
Wenn der dynamisch zugewiesene Speicher nicht ausreicht oder mehr als erforderlich ist, können Sie die Größe des zuvor zugewiesenen Speichers mit realloc()
ändern Funktion.
Syntax von realloc()
ptr = realloc(ptr, x);
Hier, ptr wird mit einer neuen Größe x neu zugewiesen .
Beispiel 3:realloc()
#include <stdio.h>
#include <stdlib.h>
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:\n");
for(i = 0; i < n1; ++i)
printf("%pc\n",ptr + i);
printf("\nEnter the new size: ");
scanf("%d", &n2);
// rellocating the memory
ptr = realloc(ptr, n2 * sizeof(int));
printf("Addresses of newly allocated memory:\n");
for(i = 0; i < n2; ++i)
printf("%pc\n", ptr + i);
free(ptr);
return 0;
}
Ausgabe
Enter size: 2 Addresses of previously allocated memory: 26855472 26855476 Enter the new size: 4 Addresses of newly allocated memory: 26855472 26855476 26855480 26855484
C Sprache
- Nur-Lese-Speicher (ROM)
- Mikroprozessoren
- C++-Speicherverwaltung:neu und löschen
- Cervoz aktualisiert DDR4-2666-Speicher der nächsten Generation
- C++ Dynamische Zuordnung von Arrays mit Beispiel
- calloc()-Funktion in der C-Bibliothek mit Programm BEISPIEL
- realloc()-Funktion in der C-Bibliothek:Wie verwenden? Syntax &Beispiel
- C - Speicherverwaltung
- Dynamische Preisgestaltung im traditionellen Einzelhandel ist unvermeidlich
- Dynamischer C++-Speicher