小标
2019-06-10
来源 :
阅读 1308
评论 0
摘要:本文主要向大家介绍了C/C++知识点之malloc、free、realloc、calloc函数,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之malloc、free、realloc、calloc函数,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

原型: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;
}
原型:void free(void * ptr);
功能:搭配malloc()函数,释放malloc函数申请的动态内存;
注意:对于free(ptr),若ptr为NULL,则可进行多次释放,若ptr是非空指针,则free对ptr只能进行一次操作,否则程序将崩溃;
示例:见malloc函数;
结果:见malloc函数;
原型: 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 = %s\n", str);
/* 重新分配内存 */
str = (char *)realloc(str, 25);
strcat(str, ", C");
printf("String = %s\n", str);
free(str);
system("pause");
return 0;
}原型: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;
}本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号