C Dynamisk minnetildeling ved bruk av malloc (), calloc (), gratis () og realloc ()

I denne opplæringen lærer du å dynamisk tildele minne i C-programmet ditt ved hjelp av standard biblioteksfunksjoner: malloc (), calloc (), gratis () og realloc ().

Som du vet er en matrise en samling av et fast antall verdier. Når størrelsen på en matrise er deklarert, kan du ikke endre den.

Noen ganger kan størrelsen på matrisen du erklærte være utilstrekkelig. For å løse dette problemet kan du tildele minne manuelt i løpet av kjøretiden. Dette er kjent som dynamisk minnetildeling i C-programmering.

Å allokere dynamisk minne, biblioteksfunksjoner er malloc(), calloc(), realloc()og free()blir brukt. Disse funksjonene er definert i toppfilen.

C malloc ()

Navnet "malloc" står for minnetildeling.

Den malloc()funksjonen forbeholder en blokk med minne for den angitte antall byte. Og den returnerer en peker voidsom kan kastes i pekere av hvilken som helst form.

Syntaks for malloc ()

 ptr = (castType*) malloc(size);

Eksempel

 ptr = (float*) malloc(100 * sizeof(float));

Ovennevnte uttalelse tildeler 400 byte minne. Det er fordi størrelsen på floater 4 byte. Og pekeren ptr holder adressen til den første byten i det tildelte minnet.

Uttrykket resulterer i en NULLpeker hvis minnet ikke kan tildeles.

C calloc ()

Navnet "calloc" står for sammenhengende tildeling.

Den malloc()funksjons tildeler minne og bladene minnet initialisert. Mens calloc()funksjonen tildeler minne og initialiserer alle biter til null.

Syntaks for calloc ()

 ptr = (castType*)calloc(n, size);

Eksempel:

 ptr = (float*) calloc(25, sizeof(float));

Ovennevnte utsagn tildeler sammenhengende plass i minnet for 25 elementelementer float.

C gratis ()

Dynamisk tildelt minne opprettet med enten calloc()eller malloc()ikke blir frigjort alene. Du må eksplisitt bruke for free()å frigjøre plassen.

Syntaks for gratis ()

 free(ptr);

Denne uttalelsen frigjør plassen som er tildelt i minnet som er pekt av ptr.

Eksempel 1: malloc () og gratis ()

 // Program to calculate the sum of n numbers entered by the user #include #include 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; ) 

Her har vi dynamisk tildelt minnet til n antall int.

Eksempel 2: calloc () og gratis ()

 // Program to calculate the sum of n numbers entered by the user #include #include 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; ) 

C realloc ()

Hvis det dynamisk tildelte minnet er utilstrekkelig eller mer enn nødvendig, kan du endre størrelsen på tidligere tildelt minne ved hjelp av realloc()funksjonen.

Syntaks for realloc ()

 ptr = realloc(ptr, x);

Her omfordeles ptr med en ny størrelse x.

Eksempel 3: realloc ()

 #include #include 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: "); for(i = 0; i < n1; ++i) printf("%u",ptr + i); printf("Enter the new size: "); scanf("%d", &n2); // rellocating the memory ptr = realloc(ptr, n2 * sizeof(int)); printf("Addresses of newly allocated memory: "); for(i = 0; i < n2; ++i) printf("%u", ptr + i); free(ptr); return 0; )

Når du kjører programmet, vil utdataene være:

 Angi størrelse: 2 Adresser til tidligere tildelt minne: 26855472 26855476 Angi den nye størrelsen: 4 Adresser til nylig tildelt minne: 26855472 26855476 26855480 26855484

Interessante artikler...