stdlib.h

malloc

Описание

void * malloc( size_t size )

Функцията резервира блок от памет с размер броя на байтовете зададени в size и връща указател от тип void съдържащ адреса на първия байт в блока. Преди всеки блок се разполага структура с информация за него. Това може да доведе до силно фрагментиране на паметта, при заделянето на множество малки блокове.

Параметри

size_t size

Указва броя баитове който ще бъдат заделени.

Връщани стойности

Функцията връща указател към блока или NULL ако паметта не може да бъде заделена.

Примери

от: adviser at cpp-examples dot com   Свали кода във файл
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.    int *n = (int*)malloc(sizeof(int));
  6.    *n = 5;
  7.    printf("%d", *n); //5
  8.    free(n);
  9.    return 0;
  10. }
от: adviser at cpp-examples dot com   Свали кода във файл
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.   int *n = (int*)malloc(sizeof(int)*20); //заделя масив от тип int с 20 елемента
  6.   for(int i=0; i<20; i++)
  7.     n[i] = i;
  8.   for(int j=0; j<20; j++)
  9.     printf("%d", n[j]);
  10.   free(n);
  11.   return 0;
  12. }
от: adviser at cpp-examples dot com   Свали кода във файл
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct Name
  4. {
  5.   char first[20];
  6.   char second[20];
  7.   char last[20];
  8. };
  9. int main()
  10. {
  11.   Name *p = (Name*)malloc(sizeof(Name)); //заделя памет за един обект от тип Name
  12.   if(p != NULL)
  13.   {
  14.     scanf("%s %s %s", p->first, p->second, p->last);
  15.     printf("%s %s %s", p->first, p->second, p->last);
  16.     free(p);
  17.   }
  18.   return 0;
  19. }
от: adviser at cpp-examples dot com   Свали кода във файл
  1. /* Заделя от динамичната памет за няколко прости променливи */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {
  7.    int *iPtr;
  8.    float *fPtr;
  9.    char *myName;
  10.  
  11.    iPtr = (int*)malloc(sizeof(int));
  12.    fPtr = (float*)malloc(sizeof(float));
  13.    myName = (char*)malloc(20 * sizeof(char));
  14.  
  15.    *iPtr = 25;
  16.    *fPtr = 3.14159;
  17.    printf("Какво е вашето име:");
  18.    gets(myName)
  19.  
  20.    printf("Стойности на променливите:\n");
  21.    printf("iPtr: %d.\n", *iPtr);
  22.    printf("fPtr: %f.\n", *fPtr);
  23.    printf("myName: %s\n", myName);
  24.  
  25.   
  26.    free(iPtr);
  27.    free(fPtr);
  28.    free(myName);
  29.    return 0;
  30. }
  31.  

Бележки

Тъй като функцията връща указател от тип void е необходимо да бъде използвана операция за преобразуване ако е нужен указател към друг тип.

Виж също

calloc - заделя парчета от памет
realloc - променя размера на предишно заделена памет
free - връща паметта на операционната система