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

内蒙古城乡和住房建设厅网站建网站费用

内蒙古城乡和住房建设厅网站,建网站费用,中央经济工作会议2021解读,深圳北网站建设目录 本章重点 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 几个经典的笔试题 柔性数组 动态内存管理—自己维护自己的内存空间的大小 首先我们申请一个变量,再申请一个数组 这是我们目前知道的向内存申请…

目录

本章重点

为什么存在动态内存分配
动态内存函数的介绍
malloc
free
calloc
realloc
常见的动态内存错误
几个经典的笔试题
柔性数组
动态内存管理—自己维护自己的内存空间的大小
首先我们申请一个变量,再申请一个数组

这是我们目前知道的向内存申请空间的一种方法 

但是这两种申请空间大小的方法有一个问题就是他的内存大小是不能被改变的

那么我们今天就引入动态内存分配这个知识点

首先我们来看一下malloc这个函数

Allocate memory block:开辟内存空间(块)

size_t size:size表示我要划分的字节,这40个字节有自己的起始位置,把起始位置的地址给你返回来,这40个字节的用途是不确定的,所以返回为void*,我们按照自己想要的类型进行强制类型转换,那么我们有没有申请空间的时候申请失败,,如果我的内存总共就8个G/16个G,所以一旦开辟失败就返回空指针(NULL)

现在我们来看代码(malloc函数如何使用)

#define CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{int arr[10] = { 0 };int* p = (int*)malloc(40);//我们拿一个整型指针接收,因为每加1就跳过一个整型,这样遍历我们每一个元素就会方便一些if (p == NULL){printf("%s\n", strerror(errno));return 1;}int i = 0;for (i = 0; i < 10; i++){*(p + i) = i;}for (i = 0; i < 10; i++){printf("%d ", *(p + i));}return 0;
}

我们把void*强制类型转化为Int*,我们拿一个整型指针接收,因为每加1就跳过一个整型,这样遍历我们每一个元素就会方便一些

如果动态内存开辟失败我就返回1

这个地方没有free,并不是说内存空间就不回收了,当程序退出的时候,系统会自动回收内存空间

这个时候我们把free加上来看效果

#define CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{int arr[10] = { 0 };int* p = (int*)malloc(40);//我们拿一个整型指针接收,因为每加1就跳过一个整型,这样遍历我们每一个元素就会方便一些if (p == NULL){printf("%s\n", strerror(errno));return 1;}int i = 0;for (i = 0; i < 10; i++){*(p + i) = i;}for (i = 0; i < 10; i++){printf("%d ", *(p + i));}free(p);return 0;
}

我在free(p)出添加一个断点,程序运行起来我们就直接走到了free(p)这个位置,我们把代码调试起来给大家看一看

 我们按住F10调试起来走到断点处,打开调试,窗口,监视,随便选一个窗口进入

 这里我们为什么要输入p,10呢?是因为我们的p是一个指针,要加一个10才能访问到数组中的所有元素,我们在按F10走出free(p)就可以看到内存被释放了,但是p的值是没有变的

那既然有成功的案例,那我们来看一下动态内存开辟失败的案例,来看下面代码

INT_MAX表示的数字是非常的大的,没有这么大的空间供你使用,所以我们此时动态内粗开辟失败

常见的一些类型对应的数字表示范围的大小

#define MB_LEN_MAX    5             /* max. # bytes in multibyte char */
#define SHRT_MIN    (-32768)        /* minimum (signed) short value */
#define SHRT_MAX      32767         /* maximum (signed) short value */
#define USHRT_MAX     0xffff        /* maximum unsigned short value */
#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */
#define INT_MAX       2147483647    /* maximum (signed) int value */
#define UINT_MAX      0xffffffff    /* maximum unsigned int value */
#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */
#define LONG_MAX      2147483647L   /* maximum (signed) long value */
#define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */
#define LLONG_MAX     9223372036854775807i64       /* maximum signed long long int value */
#define LLONG_MIN   (-9223372036854775807i64 - 1)  /* minimum signed long long int value */
#define ULLONG_MAX    0xffffffffffffffffui64       /* maximum unsigned long long int value */

对于下面这个代码我们画个图给大家在解释一下

	int arr[10] = { 0 };int* p = (int*)malloc(40);if (p == NULL){printf("%s\n", strerror(errno));return 1;}

这里我们想一下我们前面讲到的野指针

free(p);
p = NULL;

malloc申请,free释放,我们暂时把p给释放了,但是p如果记得这个地址,那么p有朝一日能够找到这个内存区域,但是这个内存区域已经还给操作系统了,已经不属于我们了,这个时候我们把p拿起来去访问就成为了野指针,为了防止p成为空指针了,我们把它置为空,把他赋值为NULL,就好像是一条野狗,我们可以拿一根绳子把它拴在树上,希望大家能够理解

但是嫩你只顾申请但是不释放,这样就可能会导致内存泄漏的问题,给大家写一个死循环的开辟内存的代码

当然我的电脑比较落后一点,所有设施都稍微要落后一点,所以当时我运行起来就有一点卡,浏览器就被卡出去了,其实内存泄漏是非常危险的,感兴趣可以尝试一下,运行起来代码打开任务管理器可以发现他达到一定程度就会稳定下来,说明现代的电脑是非常聪明的

#include<stdio.h>
int main()
{while (1){malloc(1);}return 0;
}

本章终

 

 

http://www.mnyf.cn/news/39806.html

相关文章:

  • 做网站好做吗自媒体平台
  • 国内新闻最近新闻今天班级优化大师头像
  • 找工作哪个网站好58同城有效的网络推广
  • 999免费网站传奇做一个简单的网站需要多少钱
  • 为什么要建立网站重庆seo扣费
  • 做阿里巴巴网站没有专业客服吧百度云怎么找资源
  • 高清图片素材哪里找优化公司结构
  • wordpress名站搜索引擎谷歌入口
  • 做淘宝客网站需要做后台吗怎样优化网站关键词排名靠前
  • 做搞笑图片的网站济南网络优化哪家专业
  • 子页面的网站地址怎么做搜索引擎营销方案例子
  • 免费网站java源seo课
  • 想开一个网站开发的公司百度广告语
  • 网站开发有什么软件有哪些近期重大新闻事件
  • 教做奥数的网站临沂做网站推广的公司
  • 北京专业网站改版公司百度怎么创建自己的网站
  • 各网站网络营销产品价格策略上海推广系统
  • 产品推广公司搜索引擎优化管理实验报告
  • 哈尔滨市建设工程信息网官方网站百度seo刷排名工具
  • 长春怎么注册网站平台竞价如何屏蔽恶意点击
  • 网站制作网站开发新的网络推广方式
  • 红酒网站制作百度查重软件
  • 西安学网站开发哪边好上海网站制作推广
  • 西安建设手机网站深圳网站关键词
  • 重庆彭水网站建设网页设计作品集
  • 企业 网站 建设 规范风云榜
  • 深圳公明网站制作中囯军事网
  • 长春最专业的网站建设磁力搜索引擎哪个好
  • 海宏集团网站建设方案惠州seo公司
  • 烟台 做网站深圳网络营销软件