前言

在学习 C 语言时,我们常常会被内存分配的几个函数搞得晕头转向。所以今天我们就来看看,这几个常用的内存分配函数的简单用法。

malloc函数


原型

extern void* malloc(unsigned int size)

功能

动态分配内存;

注意

size 仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故编程时需要通过以下方式给出:”长度 * sizeof(数据类型)”;


示例

  1. //动态分配内存,输入5个数据,并把低于60的值打印出来
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int *ptr = (int *)malloc(5 * sizeof(int));//分配内存
  7. for (int i = 0; i < 5; i++)
  8. {
  9. scanf_s("%d", &ptr[i]);//输入数据
  10. }
  11. int min = 60;
  12. for (int i = 0; i < 5; i++)
  13. {
  14. if (min > *(ptr + i))
  15. printf("%5d", *(ptr + i));//打印出低于60的值
  16. }
  17. free(ptr);
  18. system("pause");
  19. return 0;
  20. }

free函数

原型

void free(void * ptr)

功能

搭配 malloc() 函数,释放 malloc 函数申请的动态内存;

注意

对于 free(ptr),若 ptrNULL,则可进行多次释放,若 ptr 是非空指针,则 freeptr 只能进行一次操作,否则程序将崩溃;

示例

malloc 函数;

结果

malloc 函数;

realloc函数

原型

void* realloc(void * ptr,unsigned int size)

功能

先判断当前指针是否有足够的连续空间,若足够,扩大 ptr 指向的地址并返回,若不够,怎按 size 指定的大小分配空间,将原数据 copy 到新分配的内存中,然后释放原 ptr 所指向区域;

注意

内存使用完毕后,应使用 free() 函数释放,但原来的指针是自动释放,不需要使用 free


示例

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. char *str;
  6. /* 一开始的内存分配 */
  7. str = (char *)malloc(15);
  8. strcpy(str, "Hello World!");
  9. printf("String = %s\n", str);
  10. /* 重新分配内存 */
  11. str = (char *)realloc(str, 25);
  12. strcat(str, ", C");
  13. printf("String = %s\n", str);
  14. free(str);
  15. system("pause");
  16. return 0;
  17. }

calloc函数

原型

void* calloc(unsigned int num,unsigned int size)

功能

为已经分配的内存重新分配空间并复制内容;

注意

num:对象个数,size:对象占据的内存字节数,相较于 malloc 函数,calloc 函数会自动将内存初始化为 0;


示例

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int num;
  6. int i;
  7. int *ptr;
  8. printf("元素个数为:");
  9. scanf("%d", &num);
  10. ptr = (int*)calloc(num, sizeof(int));
  11. printf("输入 %d 个数字:\n", num);
  12. for (i = 0; i < num; i++)
  13. {
  14. scanf("%d", &ptr[i]);
  15. }
  16. printf("输入的数字为:");
  17. for (i = 0; i < num; i++) {
  18. printf("%d ", ptr[i]);
  19. }
  20. printf("\n");
  21. system("pause");
  22. return 0;
  23. }

总结

以上就是关于 C 语言中内存分配的几个函数的用法了,如果你觉得本文对你有所帮助,那就点个赞再走吧!