Ц Динамичко додељивање меморије помоћу маллоц (), цаллоц (), фрее () & реаллоц ()

У овом упутству ћете научити како динамички алоцирати меморију у свом програму Ц користећи стандардне функције библиотеке: маллоц (), цаллоц (), фрее () и реаллоц ().

Као што знате, низ је колекција одређеног броја вредности. Једном када је величина поља декларисана, не можете је променити.

Понекад величина низа који сте прогласили може бити недовољна. Да бисте решили овај проблем, можете ручно доделити меморију током извођења. Ово је познато као динамичко додељивање меморије у програмирању на језику Ц.

Да издвоји меморије динамично, библиотека функције malloc(), calloc(), realloc()и free()користе се. Ове функције су дефинисане у заглављу датотеке.

Ц маллоц ()

Назив „маллоц“ означава додељивање меморије.

malloc()Функција резервише блок меморије од одређеног броја бајтова. И, враћа показивач voidкоји се може улити у показиваче било ког облика.

Синтакса маллоц ()

 ptr = (castType*) malloc(size);

Пример

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

Горња изјава додељује 400 бајтова меморије. То је зато што је величина float4 бајта. И, показивач птр садржи адресу првог бајта у додељеној меморији.

Израз резултира NULLпоказивачем ако меморија не може бити додељена.

Ц калок ()

Назив "цаллоц" означава суседну алокацију.

malloc()Функција издваја меморије и лишће меморија неиницијализованој. Док calloc()функција додељује меморију и иницијализује све битове на нулу.

Синтакса цаллоц ()

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

Пример:

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

Горња изјава додељује непрекидни простор у меморији за 25 елемената типа float.

Ц бесплатно ()

Динамички додељена меморија креирана са calloc()или malloc()не ослобађа се сама. Морате изричито користити free()за ослобађање простора.

Синтакса фрее ()

 free(ptr);

Ова изјава ослобађа простор додељен у меморији на коју указује ptr.

Пример 1: маллоц () и фрее ()

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

Овде смо динамички доделили меморију за н број int.

Пример 2: цаллоц () и фрее ()

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

Ц реаллоц ()

Ако је динамички додељена меморија недовољна или већа од потребне, можете променити величину претходно додељене меморије помоћу realloc()функције.

Синтакса реаллоц ()

 ptr = realloc(ptr, x);

Овде се птр прерасподељује са новом величином к.

Пример 3: реаллоц ()

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

Када покренете програм, излаз ће бити:

 Унесите величину: 2 адресе претходно додељене меморије: 26855472 26855476 Унесите нову величину: 4 адресе ново додељене меморије: 26855472 26855476 26855480 26855484

Занимљиви Чланци...