前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C 语言中的 malloc,free,calloc,realloc

C 语言中的 malloc,free,calloc,realloc

作者头像
村雨遥
发布2022-06-15 09:02:09
4380
发布2022-06-15 09:02:09
举报
文章被收录于专栏:JavaPark

malloc函数

  • 原型:extern void* malloc(unsigned int size)
  • 功能:动态分配内存;
  • 注意:size 仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故编程时需要通过以下方式给出:长度 * sizeof(数据类型)
  • 示例:
代码语言:javascript
复制
//动态分配内存,输入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),若 ptrNULL,则可进行多次释放,若 ptr 是非空指针,则 freeptr 只能进行一次操作,否则程序将崩溃;
  • 示例:见 malloc 函数;
  • 结果:见 malloc 函数;

realloc函数

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

int main()
{
   char *str;

	/* 一开始的内存分配 */
	str = (char *)malloc(15);
	strcpy(str, "Hello World!");
	printf("String = %s\n", str);

	/* 重新分配内存 */
	str = (char *)realloc(str, 25);
	strcat(str, ", C");
	printf("String = %s\n", str);

	free(str);
	system("pause");
	return 0;
}

calloc函数

  • 原型:void* calloc(unsigned int num,unsigned int size)
  • 功能:为已经分配的内存重新分配空间并复制内容;
  • 注意:num:对象个数,size:对象占据的内存字节数,相较于 malloc 函数,calloc 函数会自动将内存初始化为 0;
  • 示例:
代码语言:javascript
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • malloc函数
  • free函数
  • realloc函数
  • calloc函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档