Latest web development tutorials

C-Speicherverwaltung

In diesem Kapitel wird die C dynamische Speicherverwaltung zu erklären. C-Sprache für die Zuweisung und Verwaltung von Speicher bietet mehrere Funktionen. Diese Funktionen können in<stdlib.h> Header - Datei gefunden werden.

序号函数和描述
1void *calloc(int num, int size);
该函数分配一个带有num个元素的数组,每个元素的大小为size字节。
2void free(void *address);
该函数释放 address 所指向的h内存块。
3void *malloc(int num);
该函数分配一个num字节的数组,并把它们进行初始化。
4void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到newsize

Dynamische Speicherzuweisung

Bei der Programmierung, wenn Sie die Größe des Arrays im Voraus wissen, einfacher die Array-Definition. Zum Beispiel wird ein Array zum Speichern von Namen, die bis zu 100 Zeichen aufnehmen, so können Sie das Array wie folgt definieren:

char name[100];

wenn Sie nicht wissen, im Voraus jedoch die Länge des Textes zu speichern, wie eine detaillierte Beschreibung eines Themas zu Ihrem Shop an. Hier müssen wir einen Zeiger zu definieren, die auf ein Zeichen undefiniert gelernt Speichergröße zeigt, und dann das Follow-up in den Speicher bei Bedarf wie folgt verteilt werden:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

Das obige Programm kann auchcalloc () verwenden , um zu schreiben, müssen nur malloc Calloc ersetzen, wie unten dargestellt:

calloc(200, sizeof(char));

Wenn die dynamische Zuweisung von Speicher, vollständige Kontrolle über die Größe jeder Wert haben können übergeben werden. Diejenigen vordefinierten Array-Größe kann die Größe nicht geändert werden, sobald sie definiert ist.

Nachjustieren die Speichergröße und den freien Speicher

Wenn das Programm beendet wird , befreit das Betriebssystem automatisch alle auf dem Programm zugewiesenen Speicher, empfehlen jedoch, dass Sie Speicher nicht benötigen, sollten Sie die Funktionfrei () aufrufen , um Speicher freizugeben.

Alternativ können Sie die Funktionrealloc () aufrufen , um die Größe des zugewiesenen Speicherblocks zu erhöhen oder zu verringern.Lassen Sie uns verwenden realloc () und free () Funktion, schauen Sie wieder bei dem obigen Beispiel:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student.");
   }
   /* 假设您想要存储更大的描述信息 */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* 使用 free() 函数释放内存 */
   free(description);
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

Sie können nicht versuchen, zusätzlichen Speicher neu zu verteilen, strcat () Funktion aufgrund unzureichender gespeichert Beschreibung verfügbaren Speicher einen Fehler erzeugt.