Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

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

  1. Nur-Lese-Speicher (ROM)
  2. Mikroprozessoren
  3. C++-Speicherverwaltung:neu und löschen
  4. Cervoz aktualisiert DDR4-2666-Speicher der nächsten Generation
  5. C++ Dynamische Zuordnung von Arrays mit Beispiel
  6. calloc()-Funktion in der C-Bibliothek mit Programm BEISPIEL
  7. realloc()-Funktion in der C-Bibliothek:Wie verwenden? Syntax &Beispiel
  8. C - Speicherverwaltung
  9. Dynamische Preisgestaltung im traditionellen Einzelhandel ist unvermeidlich
  10. Dynamischer C++-Speicher