C Dünaamiline mälu jaotamine malloc (), calloc (), free () ja realloc () abil

Lang L: none (table-of-contents)

Selles õpetuses õpite oma C-programmis mälu dünaamiliselt eraldama, kasutades tavapäraseid raamatukogu funktsioone: malloc (), calloc (), free () ja realloc ().

Nagu teate, on massiiv fikseeritud arvu väärtuste kogum. Kui massiivi suurus on deklareeritud, ei saa te seda enam muuta.

Mõnikord võib deklareeritud massiivi suurus olla ebapiisav. Selle probleemi lahendamiseks saate tööaja jooksul mälu käsitsi eraldada. Seda nimetatakse d-dünaamiliseks mälu eraldamiseks C-programmeerimisel.

Eraldada mälu dünaamiliselt, raamatukogu funktsioonid malloc(), calloc(), realloc()ja free()kasutatakse. Need funktsioonid on määratletud päisefailis.

C malloc ()

Nimi "malloc" tähistab mälu eraldamist.

malloc()Funktsioon jätab ploki mälu määratletud baitide arvu. Ja see tagastab kursori, voidmille saab visata mis tahes kujul osutitesse.

Malloki süntaks ()

 ptr = (castType*) malloc(size);

Näide

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

Ülaltoodud lause eraldab 400 baiti mälu. Sellepärast, et suurus floaton 4 baiti. Ja kursor ptr hoiab eraldatud mälus esimese baidi aadressi.

Avaldise tulemuseks on NULLosuti, kui mälu ei saa eraldada.

C calloc ()

Nimi "calloc" tähistab külgnevat jaotust.

malloc()Funktsiooni eraldab mälu ja lehed mälu deinitsialiseerimine. See calloc()funktsioon eraldab mälu ja lähtestab kõik bitid nulli.

Calloc () süntaks

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

Näide:

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

Ülaltoodud lause eraldab 25 tüübielemendile mälus külgnevat ruumi float.

C vaba ()

Kummaga loodud dünaamiliselt eraldatud mälu calloc()või malloc()see ei vabane iseseisvalt. free()Ruumi vabastamiseks peate seda otseselt kasutama .

Vaba süntaks ()

 free(ptr);

See lause vabastab tähistatud mälus eraldatud ruumi ptr.

Näide 1: malloc () ja free ()

 // 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; ) 

Siin oleme dünaamiliselt eraldanud mälu n arvule int.

Näide 2: calloc () ja free ()

 // 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 ()

Kui dünaamiliselt eraldatud mälu on ebapiisav või rohkem kui vaja, saate realloc()funktsiooni abil varem eraldatud mälu suurust muuta .

Realloc () süntaks

 ptr = realloc(ptr, x);

Siin jaotatakse ptr uue suurusega x ümber.

Näide 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; )

Programmi käivitamisel on väljund järgmine:

 Sisestage suurus: 2 Varem eraldatud mälu aadressid: 26855472 26855476 Sisestage uus suurus: 4 Värskelt eraldatud mälu aadressid: 26855472 26855476 26855480 26855484

Huvitavad Artiklid...