Nwlapcug.com


Come fare l'allocazione di memoria dinamica in C

In molti casi, l'utente determina al volo se un programma elaborerà una matrice di 10 elementi o 10.000. Poiché la dimensione della matrice è nota in anticipo, è necessario riservare memoria e la rilasciano durante l'esecuzione del programma. Questa gestione della memoria durante il runtime è noto in informatica come allocazione dinamica della memoria. Questo articolo si concentra sulle funzioni dedicate all'allocazione dinamica della memoria in C.

Istruzioni

1

Includere il file di libreria con le definizioni di libreria standard. Questo è il file "stdlib. h" e comprende, tra le altre importanti caratteristiche di C, tutte le funzioni che eseguono l'allocazione dinamica della memoria. Per includere questo file di libreria nel programma, inserire la seguente riga nella parte superiore del file di intestazione e di origine.


Esempio:

#include

2

Decidere cosa si vuole fare. Poi scegliere la funzione dai seguenti passaggi che meglio si adatta l'azione di allocazione di memoria che si desidera eseguire.

3

Utilizzare malloc () per un blocco di memoria di dimensioni note. "Malloc" alloca "size" byte e restituisce un puntatore all'inizio del blocco.


Prototipo:

void * malloc (size_t size);

Esempio:

int i;

char * buf;
printf ("inserire la lunghezza della stringa:");

scanf ("%d" & i);

BUF = (char*)malloc(i+1);

Se (NULL = = buf) uscita (1);

ecc

4

Impiegano calloc () per una matrice di elementi dove ogni elemento ha una dimensione di più di un byte. "Calloc" alloca un blocco di memoria per gli elementi "num" ogni elemento essendo "size" byte in lunghezza. Restituisce un puntatore all'inizio del blocco.


Prototipo:

void * calloc (size_t num, size_t size);

Esempio:

int i, n;

int * pArr;

printf ("inserire il numero di valori integer:");

scanf ("%d" & i);

n = sizeof (int);

pArr = (int *) calloc (i, n);

Se (NULL = = pArr) uscita (1);

ecc

5

Utilizzare realloc per modificare la dimensione di un blocco di memoria. "Realloc" espande o riduce il blocco di memoria di byte "dimensione" che "ptr" ha sottolineato.


Prototipo:

OID * realloc (void * ptr, size_t size);

Esempio:

int num1, num2;

int * arr = NULL;

{

printf ("inserire un numero intero positivo:");

scanf ("%d" & num1);

while(1 > num1);

arr = (int *) calloc (num1, sizeof;

Se (NULL = = arr) uscita (1);

{

printf ("immettere un altro numero intero positivo:");

scanf ("%d" & num2);

while(1 > num2);

arr = (int *) realloc (arr, num2*sizeof(int));

Se (NULL = = arr) uscita (1);

ecc

6

Rilasciare un blocco di memoria allocato in passaggi da 3 a 5 utilizzando Free (). "Libero" rilascia il blocco di memoria che inizia a posizione di memoria che "ptr" ha sottolineato.


Prototipo:

void gratis (void * ptr);

Esempio:

int * buf;

BUF = (int*)malloc(100*sizeof(int));

Free(BUF);

ecc

Consigli & Avvertenze

  • Allocazione dinamica della memoria può essere fatto dal programmatore o da entità chiamate spazzini di programmazione.
  • Molti programmi non riescono a liberare la memoria quando non è più necessario. Questo involontario consumo di memoria è chiamato perdita di memoria.