logo

Dynamische Speicherzuweisung in C

Das Konzept von dynamische Speicherzuweisung in C-Sprache ermöglicht es dem C-Programmierer, zur Laufzeit Speicher zuzuweisen . Eine dynamische Speicherzuweisung in der Sprache C ist durch 4 Funktionen der Header-Datei stdlib.h möglich.

  1. malloc()
  2. calloc()
  3. realloc()
  4. frei()

Bevor wir die oben genannten Funktionen erlernen, wollen wir den Unterschied zwischen statischer und dynamischer Speicherzuweisung verstehen.

statische Speicherzuweisungdynamische Speicherzuweisung
Speicher wird zur Kompilierzeit zugewiesen.Speicher wird zur Laufzeit zugewiesen.
Der Speicher kann während der Programmausführung nicht vergrößert werden.Der Speicher kann während der Programmausführung erhöht werden.
im Array verwendet.Wird in verknüpften Listen verwendet.

Werfen wir nun einen kurzen Blick auf die Methoden, die für die dynamische Speicherzuweisung verwendet werden.

malloc() reserviert einen einzelnen Block des angeforderten Speichers.
calloc() Reserviert mehrere Blöcke des angeforderten Speichers.
realloc() ordnet den von den Funktionen malloc() oder calloc() belegten Speicher neu zu.
frei() Gibt den dynamisch zugewiesenen Speicher frei.

malloc()-Funktion in C

Die Funktion malloc() weist einen einzelnen Block des angeforderten Speichers zu.

Der Speicher wird zur Ausführungszeit nicht initialisiert, daher hat er zunächst einen Müllwert.

Es gibt NULL zurück, wenn der Speicher nicht ausreicht.

Die Syntax der malloc()-Funktion ist unten angegeben:

 ptr=(cast-type*)malloc(byte-size) 

Sehen wir uns das Beispiel der malloc()-Funktion an.

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let&apos;s see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>

calloc()-Funktion in C

Die Funktion calloc() weist mehrere Blöcke des angeforderten Speichers zu.

Zunächst werden alle Bytes auf Null initialisiert.

Es gibt NULL zurück, wenn der Speicher nicht ausreicht.

Die Syntax der calloc()-Funktion ist unten angegeben:

 ptr=(cast-type*)calloc(number, byte-size) 

Sehen wir uns das Beispiel der Funktion calloc() an.

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>

realloc()-Funktion in C

Wenn der Speicher für malloc() oder calloc() nicht ausreicht, können Sie den Speicher mit der Funktion realloc() neu zuweisen. Kurz gesagt, es ändert die Speichergröße.

Sehen wir uns die Syntax der Funktion realloc() an.

 ptr=realloc(ptr, new-size) 

free()-Funktion in C

Der von den Funktionen malloc() oder calloc() belegte Speicher muss durch den Aufruf der Funktion free() freigegeben werden. Andernfalls wird bis zum Beenden des Programms Speicher verbraucht.

Sehen wir uns die Syntax der Funktion free() an.

 free(ptr)