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

哪些行业没有做网站网站服务器租用价格 贴吧

哪些行业没有做网站,网站服务器租用价格 贴吧,华东建设安装有限公司网站,微信小程序开发工具手机版代码见:登录 - Gitee.com 1.为什么要有动态内存分配 本章节前常见的内存开辟方式: 上述开辟空间的方式有两个特点: 1.空间开辟的大小是固定的。 2.数组在申明时,必须指定数组的长度,数组空间一旦确定大小&#xff…

代码见:登录 - Gitee.com

1.为什么要有动态内存分配

本章节前常见的内存开辟方式:

上述开辟空间的方式有两个特点:

1.空间开辟的大小是固定的。

2.数组在申明时,必须指定数组的长度,数组空间一旦确定大小,就不能调整。

但当我需要的空间大小在程序运行时才能知道,那就需要引入动态内存开辟,让程序员自己申请和释放空间。

动态内存开辟图解:

2.malloc和free

2.1malloc

c语言提供了一个动态内存开辟的函数:头文件#include<stdlib.h>

功能:向内存的堆区申请一块连续可用的空间,并返回指向这块空间的起始地址。

1.如果开辟成功,则返回这块空间的起始地址。

2.如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查

3.返回值的类型是void* ,所以malloc函数开辟空间的类型由使用者自己决定。

4.如果size为0,malloc的行为是标准是未定义的,取决于编译器。

2.2free

c语言提供了一个动态内存的释放和回收的函数:头文件#include<stdlib.h>

1.如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。

2.如果参数ptr是NULL指针,那函数什么是都不会做。

2.3malloc和free举例

3.calloc和realloc

3.1calloc

c语言提供此函数,也可用来动态内存分配。

1.函数的功能是为num个大小为size的元素开辟的一块空间,并把空间的每个字节初始化为0

2.与函数malloc的区别在于:calloc会在返回地址之前把申请的空间的每个字节初始化为全0

 

3.2realloc

1.realloc函数的出现让动态内存管理更加灵活。

2.为了更合理的使用内存,用realloc函数可以做到对动态开辟内存大小的调整。

解释函数原型:

1.ptr是要调整的内存地址

2.size调整之后新大小,单位是字节

3.返回值为调整之后的内存起始位置

4.这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新空间。

5.realloc在调整内存空间时存在两种情况:

情况一:原有空间之后有足够大的空间。

情况二:原有空间之后没有足够大的空间,此时,会在堆空间上重新找一个合适大小的连续空间来使用,这样,函数返回的是一个新的内存地址。

4.常见的动态内存的错误

4.1对NULL指针的解引用操作

没有对malloc,calloc,realloc函数的返回值做判断。

4.2对动态开辟空间的越界访问

4.3对非动态开辟内存使用free释放

4.4使用free释放一块动态开辟内存的一部分

4.5对同一块动态内存多次释放

4.6动态开辟内存忘记释放(内存泄漏)

切记:动态开辟的内存一定要释放,并且正确释放。

5.动态内存经典笔试题分析

5.1题目一

程序崩溃原因:
1.str传递给GetMemory函数的时候,采用的值传递形参变量p其实是str的一份拷贝,当我们把malloc申请的空间的起始地址存放在p中时不会修改str,str依然为NULL,所以当GetMemory函数返回后,再去调用strcpy函数需要将"helloworld"拷贝到str指向的空间时,程序崩溃。
2.因为malloc申请的空间没有free释放,存在内存泄露

修改错误后:

 

5.2题目二

5.3题目三

5.4题目四

6.柔性数组

在c99中,结构中的最后一个元素允许是未知大小的数组,这就是柔性数组成员。

6.1柔性数组的特点

1.结构中的柔性数组成员前面必须至少一个其他成员。

2.sizeof返回的这种结构大小不包括柔性数组的内存。

3.包含柔性数组成员的结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

6.2柔性数组的使用

第一段使用柔性数组的代码更好,因为malloc以及free次数更少,有益于减少内存碎片。

7.总结C/C++中程序内存区域划分

1.栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内
存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。《函数栈帧的创建和销毁》
2.堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统)
回收。分配方式类似于链表。
3.数据段(静态区):(static)存放全局变量、静态数据。程序结束后由系统释放。
4.代码段:存放函数体(类成员函数和全局函数)的二进制代码。

本章完。

http://www.dtcms.com/wzjs/806361.html

相关文章:

  • 云南网页seo优化软件oem
  • 宿迁做网站办公空间设计尺寸标准
  • 小公司如何做网站源码站
  • 深圳拼团网站建设临汾网站建设费用
  • 做我女朋友好不好手机网站h5网站快速搭建
  • 织梦网站后台怎么登陆河南省人事考试网
  • 河南省招生网站服务平台汕头微信推广平台
  • 怎么做网页 网站制作做网站推广复杂吗
  • 10_10_微信里网站怎么做的网站与网站链接怎么做
  • 做视频网站需要什么空间沈阳微信网站开发
  • 内蒙古建设工程社保中心网站企业网站建设指导思想
  • python做网站用什么软件网站集约化后如何建设
  • 小型企业网站设计wordpress多张页面左右滑动
  • 建设的网站属于固定资产么优化志愿网站
  • 福田网站建设龙岗网站建设罗湖网站建设罗湖网站建设口碑好的宜昌网站建设
  • 微网站怎么用wordpress 伪静态 效果
  • 品牌做网站网站模仿算侵权吗
  • 电商网站都是用什么做的wordpress订阅表格代码
  • 网站怎么建设及推广广东省住房建设厅网站首页
  • 网站的信息架构外贸自建站 源码
  • 中国民政网站医院标准化建设aspcms手机网站怎么做
  • 在哪里可以学做网站网站怎么推广引流
  • 江苏中南建设投标网站推广系统建站
  • 互动网站建设特点建筑网站资料排行榜
  • 自适应网站开发网站设计策划书3000字
  • 卓业网站建设浅谈天猫的电子商务网站建设
  • 网站制作公司的swot分析手机商城手机网站建设多少钱
  • 合肥做网站公司有哪些怎么看网站是不是php语言做的
  • 网站开发技术与应用试验报告4王烨演员
  • 请公司建网站软文广告经典案例300