Deoarece C este un limbaj structurat, are niște reguli fixe pentru programare. Una dintre ele include modificarea dimensiunii unei matrice. O matrice este o colecție de elemente stocate în locații de memorie adiacente.

După cum se poate vedea, lungimea (dimensiunea) matricei de mai sus este de 9. Dar dacă există o cerință de a schimba această lungime (dimensiune)? De exemplu,
- Dacă există o situație în care sunt necesare doar 5 elemente să fie introduse în această matrice. În acest caz, restul de 4 indici doar pierd memorie în această matrice. Deci, există o cerință de a reduce lungimea (dimensiunea) matricei de la 9 la 5.
- Luați altă situație. În aceasta, există o matrice de 9 elemente cu toți cei 9 indici umpluți. Dar este nevoie să introduceți încă 3 elemente în această matrice. În acest caz, sunt necesari încă 3 indici. Deci lungimea (dimensiunea) matricei trebuie modificată de la 9 la 12.
Această procedură este denumită Alocarea dinamică a memoriei în C .
Prin urmare, C Alocarea dinamică a memoriei poate fi definită ca o procedură în care dimensiunea unei structuri de date (cum ar fi Array) este modificată în timpul rulării.
C oferă unele funcții pentru realizarea acestor sarcini. Există 4 funcții de bibliotecă furnizate de C definite în fișier antet pentru a facilita alocarea dinamică a memoriei în programarea C. Sunt:
- malloc()
- calloc()
- gratuit()
- realloc()
Să ne uităm la fiecare dintre ele mai în detaliu.
Metoda C malloc().
The malloc sau alocare de memorie metoda din C este folosită pentru a aloca dinamic un singur bloc mare de memorie cu dimensiunea specificată. Returnează un pointer de tip void care poate fi turnat într-un pointer de orice formă. Nu inițializează memoria la momentul execuției, astfel încât inițial a inițializat fiecare bloc cu valoarea implicită de gunoi.
Sintaxa lui malloc() în C
ptr = (cast-type*) malloc(byte-size) For Example:>
ptr = (int*) malloc(100 * sizeof(int));
Deoarece dimensiunea lui int este de 4 octeți, această declarație va aloca 400 de octeți de memorie. Și, pointerul ptr deține adresa primului octet din memoria alocată.

Dacă spațiul este insuficient, alocarea eșuează și returnează un pointer NULL.
Exemplu de malloc() în C
C
if else declarație java
#include> #include> int> main()> {> >// This pointer will hold the> >// base address of the block created> >int>* ptr;> >int> n, i;> >// Get the number of elements for the array> >printf>(>'Enter number of elements:'>);> >scanf>(>'%d'>,&n);> >printf>(>'Entered number of elements: %d
'>, n);> >// Dynamically allocate memory using malloc()> >ptr = (>int>*)>malloc>(n *>sizeof>(>int>));> >// Check if the memory has been successfully> >// allocated by malloc or not> >if> (ptr == NULL) {> >printf>(>'Memory not allocated.
'>);> >exit>(0);> >}> >else> {> >// Memory has been successfully allocated> >printf>(>'Memory successfully allocated using malloc.
'>);> >// Get the elements of the array> >for> (i = 0; i ptr[i] = i + 1; } // Print the elements of the array printf('The elements of the array are: '); for (i = 0; i printf('%d, ', ptr[i]); } } return 0; }> |
>
>Ieșire
Enter number of elements: 5 Memory successfully allocated using malloc. The elements of the array are: 1, 2, 3, 4, 5,>
Metoda C calloc().
- calloc sau alocare contiguă metoda din C este utilizată pentru a aloca dinamic numărul specificat de blocuri de memorie de tipul specificat. este foarte asemănător cu malloc(), dar are două puncte diferite și acestea sunt:
- Inițializează fiecare bloc cu o valoare implicită „0”.
- Are doi parametri sau argumente în comparație cu malloc().
Sintaxa calloc() în C
ptr = (cast-type*)calloc(n, element-size); here, n is the no. of elements and element-size is the size of each element.>
De exemplu:
ptr = (float*) calloc(25, sizeof(float));
Această instrucțiune alocă spațiu contiguu în memorie pentru 25 de elemente fiecare cu dimensiunea float.

Dacă spațiul este insuficient, alocarea eșuează și returnează un pointer NULL.
Exemplu de calloc() în C
C
punct java
#include> #include> int> main()> {> >// This pointer will hold the> >// base address of the block created> >int>* ptr;> >int> n, i;> >// Get the number of elements for the array> >n = 5;> >printf>(>'Enter number of elements: %d
'>, n);> >// Dynamically allocate memory using calloc()> >ptr = (>int>*)>calloc>(n,>sizeof>(>int>));> >// Check if the memory has been successfully> >// allocated by calloc or not> >if> (ptr == NULL) {> >printf>(>'Memory not allocated.
'>);> >exit>(0);> >}> >else> {> >// Memory has been successfully allocated> >printf>(>'Memory successfully allocated using calloc.
'>);> >// Get the elements of the array> >for> (i = 0; i ptr[i] = i + 1; } // Print the elements of the array printf('The elements of the array are: '); for (i = 0; i printf('%d, ', ptr[i]); } } return 0; }> |
>
>Ieșire
Enter number of elements: 5 Memory successfully allocated using calloc. The elements of the array are: 1, 2, 3, 4, 5,>
Metoda C free().
gratuit metoda în C este folosită pentru a dinamic de-alocate memoria. Memoria alocată folosind funcțiile malloc() și calloc() nu este de-alocată singură. Prin urmare, se folosește metoda free() ori de câte ori are loc alocarea dinamică a memoriei. Ajută la reducerea risipei de memorie prin eliberarea acesteia.
Sintaxa lui free() în C
free(ptr);>

Exemplu de free() în C
C
opacitatea tranziției css
#include> #include> int> main()> {> >// This pointer will hold the> >// base address of the block created> >int> *ptr, *ptr1;> >int> n, i;> >// Get the number of elements for the array> >n = 5;> >printf>(>'Enter number of elements: %d
'>, n);> >// Dynamically allocate memory using malloc()> >ptr = (>int>*)>malloc>(n *>sizeof>(>int>));> >// Dynamically allocate memory using calloc()> >ptr1 = (>int>*)>calloc>(n,>sizeof>(>int>));> >// Check if the memory has been successfully> >// allocated by malloc or not> >if> (ptr == NULL || ptr1 == NULL) {> >printf>(>'Memory not allocated.
'>);> >exit>(0);> >}> >else> {> >// Memory has been successfully allocated> >printf>(>'Memory successfully allocated using malloc.
'>);> >// Free the memory> >free>(ptr);> >printf>(>'Malloc Memory successfully freed.
'>);> >// Memory has been successfully allocated> >printf>(>'
Memory successfully allocated using calloc.
'>);> >// Free the memory> >free>(ptr1);> >printf>(>'Calloc Memory successfully freed.
'>);> >}> >return> 0;> }> |
>
>Ieșire
Enter number of elements: 5 Memory successfully allocated using malloc. Malloc Memory successfully freed. Memory successfully allocated using calloc. Calloc Memory successfully freed.>
Metoda C realloc().
realloc sau realocare metoda din C este folosită pentru a schimba dinamic alocarea memoriei unei memorie alocate anterior. Cu alte cuvinte, dacă memoria alocată anterior cu ajutorul malloc sau calloc este insuficientă, realloc poate fi folosit pentru a realocarea dinamică a memoriei . realocarea memoriei menține valoarea deja prezentă și noile blocuri vor fi inițializate cu valoarea implicită de gunoi.
Sintaxa realloc() în C
ptr = realloc(ptr, newSize); where ptr is reallocated with new size 'newSize'.>

Dacă spațiul este insuficient, alocarea eșuează și returnează un pointer NULL.
Exemplu de realloc() în C
C
#include> #include> int> main()> {> >// This pointer will hold the> >// base address of the block created> >int>* ptr;> >int> n, i;> >// Get the number of elements for the array> >n = 5;> >printf>(>'Enter number of elements: %d
'>, n);> >// Dynamically allocate memory using calloc()> >ptr = (>int>*)>calloc>(n,>sizeof>(>int>));> >// Check if the memory has been successfully> >// allocated by malloc or not> >if> (ptr == NULL) {> >printf>(>'Memory not allocated.
'>);> >exit>(0);> >}> >else> {> >// Memory has been successfully allocated> >printf>(>'Memory successfully allocated using calloc.
'>);> >// Get the elements of the array> >for> (i = 0; i ptr[i] = i + 1; } // Print the elements of the array printf('The elements of the array are: '); for (i = 0; i printf('%d, ', ptr[i]); } // Get the new size for the array n = 10; printf('
Enter the new size of the array: %d
', n); // Dynamically re-allocate memory using realloc() ptr = (int*)realloc(ptr, n * sizeof(int)); // Memory has been successfully allocated printf('Memory successfully re-allocated using realloc.
'); // Get the new elements of the array for (i = 5; i ptr[i] = i + 1; } // Print the elements of the array printf('The elements of the array are: '); for (i = 0; i printf('%d, ', ptr[i]); } free(ptr); } return 0; }> |
>
>Ieșire
Enter number of elements: 5 Memory successfully allocated using calloc. The elements of the array are: 1, 2, 3, 4, 5, Enter the new size of the array: 10 Memory successfully re-allocated using realloc. The elements of the array are: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,>
Un alt exemplu pentru metoda realloc() este:
C
cuvânt cheie static în java
#include> #include> int> main()> {> >int> index = 0, i = 0, n,> >*marks;>// this marks pointer hold the base address> >// of the block created> >int> ans;> >marks = (>int>*)>malloc>(>sizeof>(> >int>));>// dynamically allocate memory using malloc> >// check if the memory is successfully allocated by> >// malloc or not?> >if> (marks == NULL) {> >printf>(>'memory cannot be allocated'>);> >}> >else> {> >// memory has successfully allocated> >printf>(>'Memory has been successfully allocated by '> >'using malloc
'>);> >printf>(>'
marks = %pc
'>,> >marks);>// print the base or beginning> >// address of allocated memory> >do> {> >printf>(>'
Enter Marks
'>);> >scanf>(>'%d'>, &marks[index]);>// Get the marks> >printf>(>'would you like to add more(1/0): '>);> >scanf>(>'%d'>, &ans);> >if> (ans == 1) {> >index++;> >marks = (>int>*)>realloc>(> >marks,> >(index + 1)> >*>sizeof>(> >int>));>// Dynamically reallocate> >// memory by using realloc> >// check if the memory is successfully> >// allocated by realloc or not?> >if> (marks == NULL) {> >printf>(>'memory cannot be allocated'>);> >}> >else> {> >printf>(>'Memory has been successfully '> >'reallocated using realloc:
'>);> >printf>(> >'
base address of marks are:%pc'>,> >marks);>////print the base or> >///beginning address of> >///allocated memory> >}> >}> >}>while> (ans == 1);> >// print the marks of the students> >for> (i = 0; i <= index; i++) {> >printf>(>'marks of students %d are: %d
'>, i,> >marks[i]);> >}> >free>(marks);> >}> >return> 0;> }> |
>
>
Ieșire:
