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

苏州运营推广网站建设免费二级域名分发平台

苏州运营推广网站建设,免费二级域名分发平台,怀柔做网站的吗,网页微信版文件传输助手前言 在学习数据结构时,掌握指针、结构体和动态内存管理是非常关键的,它们就像是搭建程序框架和操作内存的工具箱,需要熟练掌握才能更加游刃有余地进行编程。 指针和结构体我们已经在之前详细的讲过了,今天我将带大家学习动态内存…

前言
在学习数据结构时,掌握指针、结构体和动态内存管理是非常关键的,它们就像是搭建程序框架和操作内存的工具箱,需要熟练掌握才能更加游刃有余地进行编程。
指针和结构体我们已经在之前详细的讲过了,今天我将带大家学习动态内存管理。
如果还没有学习指针和结构体可以点击下面的连接前去学习。
指针的连接

结构体的连接
在这里插入图片描述

文章目录

  • 1,为什么要动态内存分配
  • 2,malloc,free
  • 3,calloc,realloc
  • 4,常见的动态内存错误
  • 5,柔性数组
  • 6,尾声

1,为什么要动态内存分配

平时我们一般是这样开辟一块内存。

int a = 0//开辟四个字节的内存
int arr[10] = {0};//开辟四十个字节的内存

但是很明显,给其开辟的那份空间没法再变大变小了,比如我创建了一个十个元素的数组,可是我现在向往里面装20个元素,显然是办不到的,又或是我现在只想往里面装5个元素,那剩下五个元素的空间就浪费了。那么这时候就需要用到我们的动态内存分配。
动态内存分配,显然内存分配是会变化的。那么它是变化的呢?

2,malloc,free

那么我们首先要介绍malloc和free这两个函数。
malloc
在这里插入图片描述
这个函数的功能是指定一个所需空间的大小,然后就会向内存申请开辟一块连续可用的空间,返回给你那片空间的地址。
即参数size就是你所需要开辟空间的大小单位为字节,当你执行该函数后,他会返回给你一个void类型的指针,指针中是你要开辟的那份空间的地址。
注意事项
1,如果开辟成功,那么就会返回那片空间的地址。
2,如果没有开辟成功,那么就会返回一个空指针。所以一定要对malloc的返回值进行判定,以检查是否开辟成功。
3,返回的指针类型是void
,所以需要对返回类型根据你所需要的类型进行强制类型转换。
4,他的头文件时stdlib,不要忘记带。
5,在堆区开辟内存空间,而不是栈区或是静态区

free
在这里插入图片描述
free是用来释放动态内存开辟的空间的函数。当动态申请的空间不再使用的时候,就应该还给操作系统。
注意事项
如果memblock指向的空间不是动态内存开辟的,那么free的行为是未定义的.

使用

	#include<stdio.h>#include<stdlib.h>int main(){char* arr = (char*)malloc(11 * sizeof(char));//申请11个字节的空间,强制转化为char*类型的指针if (arr == NULL)//判断是否开辟成功{printf("内存分配失败");return 1;}for (int i = 0; i < 10; i++){arr[i] = i+'0';}arr[10] = '\0';printf(arr);free(arr);//释放内存arr = NULL;//将arr置为空指针return 0;}

3,calloc,realloc

接下来我们介绍calloc,和realloc这两个函数。

calloc
在这里插入图片描述
这个函数可以开辟一个内存中连续的空间并将空间里的每个字节初始化为0,第一个参数为元素的个数,第二个参数 为每个元素的字节大小,函数的返回类型依旧是 void * 类型。
与malloc的主要区别就是他会把申请的空间的每个字节都出初始化为0,而malloc则不会。
使用方法与malloc大差不差,都要判定是否开辟成功,并且在不使用时将其内存释放。

realloc
在这里插入图片描述
这个函数的功能是重新分配内存空间,调整之前开辟动态内存空间的大小, 第一个参数是之前开辟内存块的地址 ,第二个参数是调整后空间的字节大小,函数的返回类型还是void *类型。当我们觉得之前开辟的动态内存空间太大或者是太小,我们就可以使用这个函数对其进行调整。
注意事项
如果是将动态内存空间变大的话大致会分为两种情况。
1,
在这里插入图片描述
这种情况下增大内存空间不会影响到已被占用的空间,所以可以直接进行扩大。
2,
在这里插入图片描述
另找一个新空间的同时,原有开辟的内存直接被释放,我们不需要考虑内存泄漏的问题。

4,常见的动态内存错误

1,对NULL指针的解引用操作
在申请动态内存空间后忘记判定是否开辟成功,如果开辟失败会返回空指针,对空指针进行解引用操作是非法操作,编辑器会报发错误。
2.对动态开辟的内存进行越界访问

	#include<stdio.h>#include<stdlib.h>int main(){char* arr = (char*)malloc(11 * sizeof(char));//申请11个字节的空间,强制转化为char*类型的指针if (arr == NULL)//判断是否开辟成功{printf("内存分配失败");return 1;}for (int i = 0; i < 20; i++)//会越界访问{arr[i] = i+'0';}free(arr);//释放内存arr = NULL;//将arr置为空指针return 0;}

3.对非动态开辟的内存free

	#include<stdio.h>#include<stdlib.h>int main(){char a = '6';char* arr = &a;free(arr);arr = NULL;return 0;}

free函数只能对我们开辟的动态内存进行释放操作。

4.使用free释放动态内存的一部分

#include<stdio.h>#include<stdlib.h>int main(){char* arr = (char*)malloc(20 * sizeof(char));//申请20个字节的空间,强制转化为char*类型的指针if (arr == NULL)//判断是否开辟成功{printf("内存分配失败");return 1;}int i = 0;while( i < 10 ){*arr++ = i+'0';}free(arr);//此时arr的偏移量为10不是初始的位置arr = NULL;return 0;}

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

	#include<stdio.h>#include<stdlib.h>int main(){char* arr = (char*)malloc(20 * sizeof(char));//申请20个字节的空间,强制转化为char*类型的指针if (arr == NULL)//判断是否开辟成功{printf("内存分配失败");return 1;}for (int i = 0; i < 20; i++){arr[i] = i+'0';}free(arr);free(arr);//释放了两次arr = NULL;return 0;}

一块内存空间只能释放一次。
6.动态开辟内存忘记释放
忘记释放动态开辟的空间可能会造成内存泄漏。动态开辟的空间一定要记得释放!

5,柔性数组

请点这里

6,尾声

正确地管理动态内存可以提高程序的性能和可靠性,避免许多令人头痛的问题。希望本文能够帮助小伙伴们更好地理解动态内存管理。如果觉得博主讲的不错的话请给博主点个赞收个藏支持一下吧~。

http://www.dinnco.com/news/39194.html

相关文章:

  • 建设数据库网站需要哪些设备数字营销
  • 怎么做网站开发的方案互联网运营培训课程
  • 备案时网站服务内容今日头条新闻发布
  • 网站免费正能量软件下载百度收录技巧
  • 网站弹出窗口代码长沙网站seo服务
  • 高校后勤网站建设存在的问题百度流量统计
  • 哪个网站推荐做挖机事的微软优化大师
  • 装饰工程投标书济南网站自然优化
  • 微信可以做网站吗seo营销工具
  • 网站规划与建设进度真正免费的网站建站平台推荐
  • 网站建设的基本流程群站优化之链轮模式
  • 做h5哪个网站好企业如何进行搜索引擎优化
  • 网络工作室属于什么行业系统优化软件
  • 制作网站 个人优化防疫措施
  • 哪家网站建设比较好360手机助手
  • 网页设计最牛的网站建设小广告多的网站
  • 安徽省住房和城乡建设部网站视频号视频怎么看下载链接
  • 网站建设前期预算广州seo外包
  • 网站文章多久才收录我赢网客服系统
  • 如何帮别人推广赚钱北京seo主管
  • 程序员做网站外快优化加速
  • 网站的下载二维码怎么做seo推广知识
  • 马鞍山网站建设制作公司武安百度seo
  • yes风淘宝网站百度 官网
  • 网站维护成本百度应用商店下载
  • wordpress怎么优化图片短视频seo排名
  • 工艺品做网站网络营销推广公司网站
  • 深圳本地招聘网站有哪些关键词林俊杰免费听
  • 免费做公司电子画册的网站搜索引擎营销的步骤
  • 建设网站的特色超级外链吧外链代发