c/c++语言开发共享malloc,free,calloc,realloc函数

malloc函数 原型:extern void malloc(unsigned int size); 功能:动态分配内存; 注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故编程时需要通过以下方式给出:”长度 sizeof(数据类型)”; 示例: free函数 原型:void …


malloc函数

  • 原型:extern void* malloc(unsigned int size);
  • 功能:动态分配内存;
  • 注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故编程时需要通过以下方式给出:"长度 * sizeof(数据类型)";

  • 示例:

//动态分配内存,输入5个数据,并把低于60的值打印出来  #include <stdio.h> #include <stdlib.h> int main() {     int *ptr = (int *)malloc(5 * sizeof(int));//分配内存      for (int i = 0; i < 5; i++)         {             scanf_s("%d", &ptr[i]);//输入数据         }      int min = 60;          for (int i = 0; i < 5; i++)     {         if (min > *(ptr + i))             printf("%5d", *(ptr + i));//打印出低于60的值     }     free(ptr);     system("pause");     return 0; }

free函数

  • 原型:void free(void * ptr);
  • 功能:搭配malloc()函数,释放malloc函数申请的动态内存;
  • 注意:对于free(ptr),若ptr为null,则可进行多次释放,若ptr是非空指针,则free对ptr只能进行一次操作,否则程序将崩溃;
  • 示例:见malloc函数;
  • 结果:见malloc函数;

realloc函数

  • 原型: void* realloc(void * ptr,unsigned int size);
  • 功能:先判断当前指针是否有足够的连续空间,若足够,扩大ptr指向的地址并返回,若不够,怎按size指定的大小分配空间,将原数据copy到新分配的内存中,然后释放原ptr所指向区域;
  • 注意:内存使用完毕后,应使用free()函数释放,但原来的指针是自动释放,不需要使用free;

  • 示例:
#include <stdio.h> #include <stdlib.h>  int main() {    char *str;      /* 一开始的内存分配 */     str = (char *)malloc(15);     strcpy(str, "hello world!");     printf("string = %sn", str);      /* 重新分配内存 */     str = (char *)realloc(str, 25);     strcat(str, ", c");     printf("string = %sn", str);      free(str);     system("pause");     return 0; }

calloc函数

  • 原型:void* calloc(unsigned int num,unsigned int size);
  • 功能:为已经分配的内存重新分配空间并复制内容;
  • 注意:num:对象个数,size:对象占据的内存字节数,相较于malloc函数,calloc函数会自动将内存初始化为0;

  • 示例:
#include <stdio.h> #include <stdlib.h>  int main() {     int num;     int i;     int *ptr;      printf("元素个数为:");     scanf("%d", &num);      ptr = (int*)calloc(num, sizeof(int));     printf("输入 %d 个数字:n", num);     for (i = 0; i < num; i++)     {         scanf("%d", &ptr[i]);     }      printf("输入的数字为:");     for (i = 0; i < num; i++) {         printf("%d ", ptr[i]);     }     printf("n");     system("pause");     return 0; }

创作不易,未经同意,转载请注明出处。

www.ctvol.com true Article c/c++语言开发共享malloc,free,calloc,realloc函数

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/602003.html

(0)
上一篇 2021年5月11日 上午2:50
下一篇 2021年5月11日 上午2:54

精彩推荐