C Dynaaminen muistin allokointi malloc (), calloc (), free () & realloc () -toimintojen avulla

Tässä opetusohjelmassa opit jakamaan muistia dynaamisesti C-ohjelmassa käyttämällä kirjaston vakiotoimintoja: malloc (), calloc (), free () ja realloc ().

Kuten tiedätte, taulukko on kokoelma kiinteää määrää arvoja. Kun taulukon koko on ilmoitettu, et voi muuttaa sitä.

Joskus ilmoittamasi taulukon koko voi olla riittämätön. Voit ratkaista tämän ongelman varaamalla muistin manuaalisesti ajon aikana. Tätä kutsutaan dynaamiseksi muistin allokoinniksi C-ohjelmoinnissa.

Varata muistia dynaamisesti, kirjaston toimintoja ovat malloc(), calloc(), realloc()ja free()käytetään. Nämä toiminnot on määritelty otsikkotiedostossa.

C malloc ()

Nimi "malloc" tarkoittaa muistin allokointia.

malloc()Toiminto varaa muistilohko määritetyn tavujen. Ja se palauttaa osoittimen, voidjoka voidaan heittää minkä tahansa muotoisiin osoittimiin.

Mallocin syntaksit ()

 ptr = (castType*) malloc(size);

Esimerkki

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

Yllä oleva lause jakaa 400 tavua muistia. Se johtuu siitä, että koko floaton 4 tavua. Ja osoitin ptr pitää varatun muistin ensimmäisen tavun osoitetta.

Lauseke johtaa NULLosoittimeen, jos muistia ei voida allokoida.

C calloc ()

Nimi "calloc" tarkoittaa vierekkäistä allokointia.

malloc()Toiminto allokoi muistia ja lehdet muisti alustettu. Ottaa huomioon, että calloc()funktio allokoi muistiin ja alustaa kaikki bitit nolla.

Calloc: n syntaksi ()

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

Esimerkki:

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

Yllä oleva lause jakaa muistissa vierekkäisen tilan 25 tyyppielementille float.

C vapaa ()

Dynaamisesti varattu muisti, joka on luotu jommallakummalla calloc()tai malloc()ei vapautu itsestään. Sinun on nimenomaisesti käytettävä free()tilaa vapauttamiseen.

Syntaksi ilmaisesta ()

 free(ptr);

Tämä lause vapauttaa osoitetun muistin varatun tilan ptr.

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

Tässä olemme osoittaneet dynaamisesti muistin n lukumäärälle int.

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

Jos dynaamisesti varattu muisti on riittämätön tai enemmän kuin vaaditaan, voit muuttaa aiemmin jaetun muistin kokoa realloc()toiminnon avulla.

Syntaksi realloc ()

 ptr = realloc(ptr, x);

Tässä ptr kohdennetaan uudella koolla x.

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

Kun suoritat ohjelmaa, tulos on:

 Syötä koko: 2 Aiemmin varatun muistin osoitteet: 26855472 26855476 Syötä uusi koko: 4 Äskettäin varatun muistin osoitteet: 26855472 26855476 26855480 26855484

Mielenkiintoisia artikkeleita...