当前位置: 首页 > news >正文

网站目录生成装修网站官网

网站目录生成,装修网站官网,培训机构线上引流推广方法,qq群排名优化软件购买Hello,各位小伙伴们,小编在这里祝福各位中秋佳节快乐呀,今天让我们来学习一下动态内存管理吧! 引言 像我们之前在开辟一段空间的时候你可能会使用整型变量来申请一块空间,或者使用数组来申请一段连续的空间&#xff…

Hello,各位小伙伴们,小编在这里祝福各位中秋佳节快乐呀,今天让我们来学习一下动态内存管理吧!

引言

像我们之前在开辟一段空间的时候你可能会使用整型变量来申请一块空间,或者使用数组来申请一段连续的空间,但它们的空间大小都是在创建变量的时候确定的!难免会造成空间的浪费或者超出空间大小。为了解决这一问题,设计了动态内存管理。

动态内存管理大大提高的空间的灵活度但也出现了一些新的问题:越是灵活越容易出错!

让我们来学习一下这四种函数吧!

1-->malloc

void*malloc(size_t size);

在进行动态内存开辟的时候,如果开辟成功就会返回一个开辟好空间的指针。如果开辟失败将会返回空指针!

例如:

#include<stdio.h>
int main ()
{int *a = (int*)malloc(40);if(a==NULL){perror("malloc");return 1;//出现错误返回}int i = 0;for(i = 0;i < 10;i++){*(p+i) = i+1;}for(i = 0;i < 10;i++){printf("%d ",*(p+i));}free(a);a = NULL;return 0;
}

要增加一个判断语句来判断a是否为空指针!

2-->free

malloc是用来申请空间的,但申请之后要及时释放!free函数就是专门为malloc来释放空间的。在释放之后,p指向的地址还给操作系统,但源地址仍然可以找到,但p不能在使用了。这样就会1造成空指针,所以在释放之后要对原来的指针变量设为空指针!

但值得注意的是,free所释放的空间必须是动态内存空间不能对非动态内存进行释放!

3--> calloc

calloc也是用来开辟空间的,与malloc有相同的地方。

void*calloc(size_t num , size_t size);

calloc所指向的num为某种类型的个数,size为该类型的大小。

如果要申请5个整型大小的空间

#include<stdio.h>
int main ()
{int *p = (int*)calloc(5 , sizeof(int));if(p ==NULL){perror("calloc");return 1;}int i = 0;for(i = 0;i < 5;i++){*(p+i) = i+1;}free(p);p = NULL;return 0;
}

 与malloc不同的是calloc在申请空间的时候会对所申请的空间进行初始化处理,初始化为0。

而malloc不会对所申请的空间进行初始化处理!

malloc的调试图
calloc的调试图

 4-->realloc

realloc是让动态管理内存更加灵活,有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的使用内存,我们一定会对内存的大小做灵活的调整。那 realloc 函数就可以做到对动态开辟内存大小的调整。

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

ptr是要调整的地址,size是调整后地址的大小。

同时realloc的调整方式有两种:1、如果后面内存空间足够大,直接在原来的基础上增加内存空间大小

2、如果后面内存空间不够大,则会重新找一块能够满足空间大小的内存,将原来的内容先拷贝进去,然后在后面进行调整。

第二种情况

 

让我们来看看如何具体使用:

#include<stdio.h>
#include<stdlib.h>
int main()
{int* p = (int*)malloc(20);if (p == NULL){perror("malloc");return 1;}//使用int i = 0;for (i = 0; i < 5; i++){*(p + i) = 1 + i;}int*ptr = (int*)realloc(p, 40);//增加5个整型if (ptr != NULL){p = ptr;}else{perror("realloc");return 1;}for (i = 5; i < 10; i++){*(p + i) = 1 + i;}for (i = 0; i < 10; i++){printf("%d ", *(p + i));}free(p);p = NULL;return 0;
}

 同时realloc可以实现malloc的功能,将ptr传递空指针就可以啦。

#include<stdio.h>
#include<stdlib.h>
int main ()
{int *p = (int *)realloc(NULL,40);if(p==NULL){perror("realloc");return 1;}int i = 0;for(i = 0;i < 10 ;i++){*(p+i) = i+1;}for(i = 0;i < 10;i++){printf("%d ",*(p+i));}free(p);p = NULL;return 0;
}

OK,今天的内容就到这里啦!祝各位小伙伴们好时节,愿得年年,常见中秋!

http://www.yayakq.cn/news/343973/

相关文章:

  • 哪里有做阿里网站的深圳市无限空间工业设计有限公司
  • 自助个人网站注册网站建设制作放之
  • 可以免费观看电影的网站网站建设需要考哪些证
  • 网站和推广在一家做的好处东营定制网站建设服务
  • 无锡 网站 seo 优化应用开发
  • 如何建设手机端网站安卓app用什么语言开发
  • 网站关键字优化销售百度广告投放价格表
  • 做彩票网站需要什么技术群晖wordpress不成功
  • 宝安营销型网站费用建设个人网站的策划书
  • 茂港网站建设公司哪个网站买东西最便宜
  • 苏州模板网站建站英语网站建设的必要性
  • wordpress插件批量修改正文内链seo排名优化软件有用
  • 海棠网站佛山新网站建设如何
  • 图片手机网站建设网站如何做后台
  • 网站栏目建设图增城网站公司电话
  • 网站建立电话iis建好的网站套用模板
  • 做全屏式网站尺寸是多大成都电子网站建设多少钱
  • 优秀的集团网站企业网站建设需求书
  • 营销型网站报价明细wordpress静态页404
  • 在线设计网站免费泉州刚刚发生的重大新闻
  • 营销型网站开发流程包括wordpress 4.9.6 主题
  • 宣传型电子商务网站外贸企业网站对外贸的重要性
  • 南阳网站网站建设wordpress 升级超时
  • 做食材的网站西安网站制作推广
  • 网站建设开发报价方案模板湖南网络大课堂
  • 企业开办网站深圳产品展厅设计公司
  • 网站 特效数据库与网站建设的关系
  • 佳匠网站建设wordpress标签tags页
  • 企业网站app北京建设银行网站首页
  • 高新手机网站建设公司wordpress主题首页修改