C Dynamisk minnesallokering med malloc (), calloc (), gratis () & realloc ()

I den här handledningen lär du dig att dynamiskt fördela minne i ditt C-program med standardbiblioteksfunktioner: malloc (), calloc (), gratis () och realloc ().

Som du vet är en matris en samling av ett fast antal värden. När storleken på en matris har förklarats kan du inte ändra den.

Ibland kan storleken på den matris du förklarade vara otillräcklig. För att lösa problemet kan du fördela minne manuellt under körningstiden. Detta kallas dynamisk minnestilldelning i C-programmering.

För att allokera minne dynamiskt, biblioteksfunktioner är malloc(), calloc(), realloc()och free()används. Dessa funktioner definieras i rubrikfilen.

C malloc ()

Namnet "malloc" står för minnesallokering.

Den malloc()funktionen reserverar ett block av minne av det angivna antalet byte. Och den returnerar en pekare voidsom kan kastas i pekare av vilken form som helst.

Syntax för malloc ()

 ptr = (castType*) malloc(size);

Exempel

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

Ovanstående uttalande tilldelar 400 byte minne. Det beror på att storleken floatär 4 byte. Och pekaren ptr håller adressen till den första byten i det tilldelade minnet.

Uttrycket resulterar i en NULLpekare om minnet inte kan allokeras.

C calloc ()

Namnet "calloc" står för sammanhängande allokering.

Den malloc()funktions allokerar minne och lämnar minnet oinitierad. Medan den calloc()funktions allokerar minne och initierar alla bitar till noll.

Syntax för calloc ()

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

Exempel:

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

Ovanstående uttalande tilldelar sammanhängande utrymme i minnet för 25 typelement float.

C fri ()

Dynamiskt tilldelat minne som skapats med endera calloc()eller malloc()inte frigörs på egen hand. Du måste uttryckligen använda för free()att frigöra utrymmet.

Syntax för gratis ()

 free(ptr);

Detta uttalande frigör det utrymme som tilldelats i minnet som pekas av ptr.

Exempel 1: malloc () och 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; ) 

Här har vi dynamiskt tilldelat minnet för n antal int.

Exempel 2: calloc () och 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 ()

Om det dynamiskt tilldelade minnet är otillräckligt eller mer än vad som krävs kan du ändra storleken på tidigare tilldelat minne med realloc()funktionen.

Syntax för realloc ()

 ptr = realloc(ptr, x);

Här omfördelas ptr med en ny storlek x.

Exempel 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 kör programmet blir resultatet:

 Ange storlek: 2 Adresser till tidigare tilldelat minne: 26855472 26855476 Ange den nya storleken: 4 Adresser till nyligen tilldelat minne: 26855472 26855476 26855480 26855484

Intressanta artiklar...