logo

Dynamiczna alokacja pamięci w C

Koncepcja dynamiczna alokacja pamięci w języku c umożliwia programiście C alokację pamięci w czasie wykonywania . Dynamiczna alokacja pamięci w języku C jest możliwa dzięki 4 funkcjom pliku nagłówkowego stdlib.h.

  1. malloc()
  2. kaloc()
  3. realloc()
  4. bezpłatny()

Zanim poznamy powyższe funkcje, zrozummy różnicę między statyczną alokacją pamięci a dynamiczną alokacją pamięci.

statyczna alokacja pamięcidynamiczna alokacja pamięci
pamięć jest przydzielana w czasie kompilacji.pamięć jest przydzielana w czasie wykonywania.
pamięci nie można zwiększyć podczas wykonywania programu.pamięć można zwiększyć podczas wykonywania programu.
używane w tablicy.używane na liście połączonej.

Przyjrzyjmy się teraz szybko metodom używanym do dynamicznej alokacji pamięci.

menu JavaScript
malloc() przydziela pojedynczy blok żądanej pamięci.
kaloc() przydziela wiele bloków żądanej pamięci.
realloc() ponownie przydziela pamięć zajmowaną przez funkcje malloc() lub calloc().
bezpłatny() zwalnia dynamicznie przydzielaną pamięć.

funkcja malloc() w C

Funkcja malloc() przydziela pojedynczy blok żądanej pamięci.

Nie inicjuje pamięci w czasie wykonywania, więc początkowo ma wartość śmieciową.

Zwraca NULL, jeśli pamięć nie jest wystarczająca.

zmiana nazwy folderu w systemie Linux

Poniżej podano składnię funkcji malloc():

 ptr=(cast-type*)malloc(byte-size) 

Zobaczmy przykład funkcji malloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let&apos;s see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>

funkcja calloc() w C

Funkcja calloc() przydziela wiele bloków żądanej pamięci.

Początkowo inicjuje wszystkie bajty na zero.

Zwraca NULL, jeśli pamięć nie jest wystarczająca.

Poniżej podano składnię funkcji calloc():

 ptr=(cast-type*)calloc(number, byte-size) 

Zobaczmy przykład funkcji calloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>

funkcja realloc() w C

Jeśli pamięć nie jest wystarczająca dla malloc() lub calloc(), możesz ponownie przydzielić pamięć za pomocą funkcji realloc(). Krótko mówiąc, zmienia rozmiar pamięci.

oj, w Javie

Zobaczmy składnię funkcji realloc().

 ptr=realloc(ptr, new-size) 

funkcja free() w C

Pamięć zajmowana przez funkcje malloc() lub calloc() musi zostać zwolniona poprzez wywołanie funkcji free(). W przeciwnym razie zajmie pamięć do czasu zakończenia programu.

Zobaczmy składnię funkcji free().

 free(ptr)