Latest web development tutorials

Memory Management C

Questo capitolo spiegherà la gestione della memoria dinamica C. linguaggio C per l'assegnazione e la gestione della memoria fornisce diverse funzioni. Queste funzioni possono essere trovati nel file di intestazione<stdlib.h>.

序号函数和描述
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

allocazione dinamica della memoria

Durante la programmazione, se si conosce in anticipo la dimensione della matrice, la definizione del campo più facile. Ad esempio, un array per memorizzare i nomi, che possono ospitare fino a 100 caratteri, in modo da poter definire la matrice, come segue:

char name[100];

Tuttavia, se non si conosce in anticipo la lunghezza del testo da memorizzare, come ad esempio una descrizione dettagliata di un argomento correlato al tuo negozio. Qui, abbiamo bisogno di definire un puntatore che punta a un carattere indefinito dimensione della memoria appreso, e quindi il follow-up per allocare la memoria su richiesta, come segue:

#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 );
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

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

Il programma di cui sopra può anche utilizzarecalloc () per scrivere, basta sostituire calloc malloc, come illustrato di seguito:

calloc(200, sizeof(char));

Quando l'allocazione dinamica della memoria, si ha il controllo completo sul dimensioni di qualsiasi valore può essere passato. Quelli dimensioni predefinite matrice, la dimensione non può essere modificata una volta definita.

Re-regolare le dimensioni della memoria e la memoria libera

Quando il programma termina, il sistema operativo libera automaticamente tutta la memoria assegnata al programma, tuttavia, raccomanda che non hai bisogno di memoria, è necessario chiamare la funzionefree () per liberare memoria.

In alternativa, è possibile chiamare la funzionerealloc () per aumentare o diminuire la dimensione del blocco di memoria allocata.Usiamo la funzione realloc () e free (), guarda ancora una volta l'esempio di cui sopra:

#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);
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

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

Non si può cercare di ri-allocare memoria extra, strcat () funzione genera un errore a causa di insufficiente descrizione memorizzato memoria disponibile.