博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态内存分配和释放:malloc,realloc,calloc,free函数
阅读量:2432 次
发布时间:2019-05-10

本文共 1310 字,大约阅读时间需要 4 分钟。

以下三个内存分配函数的返回值都是void*,void*可以强制转化为其他类型的指针

malloc函数

#include 
void *malloc( size_t size );

该函数在堆区分配一个size字节大小的连续空间,如果分配失败返回NULL。

#include 
#include
#include
//函数栈空间释放后,函数内的所有局部变量消失char* print_stack(){
char c[]="I am print_stack"; puts(c); return c;}//堆空间不会因函数执行结束而释放char* print_malloc(){
char *p; p=(char*)malloc(20); strcpy(p,"I am print_malloc"); puts(p); return p;}int main(){
char *p; p=print_stack();//数据放在栈空间 puts(p);//打印有异常,出现乱码 p=print_malloc();//数据放在堆空间 puts(p); system("pause");}

realloc 函数

#include 
void *realloc( void *ptr, size_t size );

功能: 函数将ptr 对象的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸都可以。 返回值是指向新空间的指针,如果错误发生返回NULL。

#include 
#include
#include
#define CAPACITY 10int main(){
char *p=(char*)malloc(CAPACITY); char c; int i=0,cap=CAPACITY; while(scanf("%c",&c)!=EOF) {
if(i==cap-1) {
cap=2*cap; p=(char*)realloc(p,cap); } p[i]=c; i++; } p[i]=0; puts(p); system("pause");}

calloc函数

#include 
void *calloc( size_t num, size_t size );

功能:num为元素的个数,size为元素的大小。如果分配失败发生返回NULL。

区别:calloc可以将内存数据初始化为0,而malloc不能对内存初始化,存储的是垃圾数据

free函数

#include 
void free( void *ptr );

功能: 函数释放指针ptr指向的空间,以供以后使用。指针ptr 必须由先前对malloc(), calloc(), realloc()的调用返回。

具体使用实例可查看:

转载地址:http://uaxmb.baihongyu.com/

你可能感兴趣的文章
以不一样的视角看物联网协议
查看>>
JavaScriptCore全面解析 (下篇)
查看>>
嵌入式操作系统与物联网演进之路
查看>>
苹果公司揭秘首批列入 Swift 源代码兼容性开源项目清单
查看>>
Python 玩转物联网之 Micropython GPIO IRQ 处理
查看>>
移动周刊第 188 期:Android 安全性要点与规范核心详析
查看>>
手机为基础的 IoT 布局已经失效,下一代操作系统是什么模样?
查看>>
无线传感器网络使用指南
查看>>
《近匠》专访机智云 CTO 刘琰——从 0 到 1 开启智能化硬件开发
查看>>
深度对话微软,解读 HoloLens 技术设计细节
查看>>
移动周刊第 191 期:如何看待 Kotlin 成为 Android 官方支持开发语言?
查看>>
物联网浪潮之下,前端工程师如何迎刃而上?
查看>>
从端到云——工业物联网项目全栈快速开发
查看>>
LoRa vs NB-IOT:哪个物联网标准更具优势?
查看>>
有钱 Python,没钱 PHP,编程语言也嫌贫爱富
查看>>
Docker是啥?容器变革的火花?
查看>>
假如从餐饮店的角度来看架构…
查看>>
这个充电宝太黑科技了,又小又不用自己带线,长见识了~
查看>>
HDC.2019后再发力,AppGallery Connect服务新升级
查看>>
网易云音乐热评的规律,44万条数据告诉你
查看>>