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

海南省网站建设_网站建设公司_Tailwind CSS_seo优化

贵港做网站化司,上线了小程序怎么样,宜昌优化网站建设,网络系统设计文章目录 Ⅰ 存在动态内存分配的原因Ⅱ 动态内存函数1. malloc2. calloc3. realloc4. free (重要) Ⅲ 常见动态内存错误1. 对 NULL 指针的解引用操作2. 对动态开辟空间的越界访问3. 对非动态开辟内存使用 free 释放4. 使用 free 释放一块动态开辟内存的一部分5. 对同一块动态内… 文章目录 Ⅰ 存在动态内存分配的原因Ⅱ 动态内存函数1. malloc2. calloc3. realloc4. free (重要) Ⅲ 常见动态内存错误1. 对 NULL 指针的解引用操作2. 对动态开辟空间的越界访问3. 对非动态开辟内存使用 free 释放4. 使用 free 释放一块动态开辟内存的一部分5. 对同一块动态内存多次释放6. 动态开辟内存没有释放内存泄漏 Ⅳ 柔性数组 引用头文件 stdlib.h Ⅰ 存在动态内存分配的原因 内存使用的方式 创建变量(开辟一块独立的空间) 局部变量 - 栈区。 全局变量 - 静态区。 创建数组(开辟一块连续的 空间) 局部数组 - 栈区。 全局数组 - 静态区。 上述开辟空间的方式有两个特点 空间开辟的大小是固定的数组在定义的时候必须指定数组的长度它所需要的内存在编译时分配。 存在的问题 不能灵活的开辟空间。如果需要的空间很少但是固定开辟的空间非常大就会造成内存浪费。如果需要的空间很多固定开辟的空间很小就会造成内存不够用的情况。因此就出现了动态内存函数用来随时更改所开辟的空间的大小。 Ⅱ 动态内存函数 1. malloc 函数原型 void* malloc (size_t size);函数功能 开辟一块 size 个字节大小连续可用的空间并返回该空间的起始地址。 函数返回值 如果开辟成功则返回一个指向开辟好空间的起始地址的指针。如果开辟失败则返回一个 NULL 指针。因此要检查好 malloc 的返回值。返回值的类型是 void*在使用指向开辟好的空间的起始地址的指针时还需要转换成自己需要的指针类型。 函数用例 申请一块空间用来存放 10 个整形。 #include stdlib.hint main() {int* p (int*)malloc(10 * sizeof(int));//malloc 返回的是 void* 的指针需要转换成对应的指针类型才能使用return 0; }2. calloc 函数原型 void* calloc (size_t num, size_t size);函数功能 为 num 个大小为 size 的元素开辟一块空间并且把该空间的每个字节初始化为 0。与 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。 函数用例 开辟一块具有 10 个元素每个元素 4 个字节的空间。 3. realloc 函数原型 void* realloc (void* ptr, size_t size);函数功能 调整由 ptr 所指向的空间大小为 size 个字节。 函数参数 ptr指向由 malloc、calloc 所开辟的空间。size新空间的大小字节。 realloc 函数的两种使用情况 void* realloc (void* ptr, size_t size);将 ptr 所指向的空间大小重新调整为 size 个字节。 void* realloc(NULL,size_t size);开辟一块有 size 个字节的空间。 函数用例 realloc 调整空间的方式 realloc在调整内存空间时存在两种情况 情况 1原有空间之后有足够大的空间扩展内存就直接原有内存之后直接追加空间原来空间的数据不发生变化返回旧地址。 情况 2原有空间之后没有足够大的空间realloc 会重新找一个内存区域开辟一块符合要求的空间返回新地址拷贝旧数据释放旧空间。 4. free (重要) 函数原型 void free (void* ptr);函数参数 ptr指向先前用 malloc、calloc、realloc 分配的内存块的起始地址。 函数功能 释放由 ptr 指向的动态开辟的空间。 函数用例 释放由各个动态内存函数所开辟的空间。 int main() {int* p1 (int*)malloc(10 * sizeof(int));int* p2 (int*)calloc(10, sizeof(int));int* p3 (int*)realloc(NULL, sizeof(int) * 10);//......free(p1);free(p2);free(p3);return 0; }注意事项 free 会将指针指向的空间释放掉但是不会改变指针内存放的地址值。也就是说即使 free 掉了 p1 p2 p3 三个指针所指向的空间这三个指针依然记得原先空间的起始地址。因此释放掉指针所指向的空间之后还必须要将该指针变量的值置为 NULL。 int main() {int* ptr (int*)malloc(10 * sizeof(int));//......free(ptr); //释放掉ptr指向的空间后ptr内存的地址值未变还是记得原来空间的地址ptr NULL; //因此要主动修改ptr内存放的地址值为NULLreturn 0; }Ⅲ 常见动态内存错误 1. 对 NULL 指针的解引用操作 在使用之前未判断动态内存函数的返回值是否是 NULL如果内存开辟失败返回的是 NULL就成了对 NULL 指针的解引用操作。 int* p (int*)malloc(40); *p 20;//使用前为判断指针 p 内的值是否有效正确做法 int* p (int*)malloc(40);if (NULL p) //使用之前先判断该空间是否开辟成功 {return 1; //1 为异常返回 }*p 20;2. 对动态开辟空间的越界访问 动态申请的空间也有着自己的范围不能无限制的使用。 int* p calloc(10, sizeof(int));if (NULL p) {perror(calloc);return 1; }for (int i 0; i 10; i)//当 i 到 10 时越界访问 {printf(%d , *(p i)); } free(p); p NULL;3. 对非动态开辟内存使用 free 释放 free 只能释放由 malloc、calloc、realloc 开辟的空间。 4. 使用 free 释放一块动态开辟内存的一部分 指向开辟空间起始地址的指针产生变动没有从动态开辟内存的起始地址开始释放空间。 5. 对同一块动态内存多次释放 忘记了已经释放过动态开辟的空间又重新释放了一遍。 int* p (int*)malloc(10 * sizeof(int)); //...... free(p);//此时已经释放过该空间一次 //..... free(p);//睡蒙了又释放一次解决办法 在释放完动态开辟好的内存后及时将该指针置为 NULL。之后如果再重复释放也不会产生问题。 6. 动态开辟内存没有释放内存泄漏 只记得申请空间不记得还。 void test() {int* p (int*)malloc(10 * sizeof(int));//p 是局部变量出了作用域就销毁等这个函数一结束就没人再记得这块空间的起始地址了if (true)//此时动态开辟的空间永远没机会释放了{return;}free(p);p NULL; }int main() {test();return 0; }Ⅳ 柔性数组 C99 中结构中的最后一个元素允许是未知大小的数组这就叫做『柔性数组』成员。 struct S {char c;int i;int arr[]; //未知大小数组 - 柔性数组成员 };柔性数组的特点 结构体中的柔性数组成员前面必须至少有一个其他成员。sizeof 返回的这种结构体大小不包含柔性数组成员的大小。包含柔性数组成员的结构体用 malloc 函数进行内存的动态分配并且分配的内存应该大于结构体的大小以适应柔性数组的预期大小。 struct S {char c;int i;int arr[]; };int main() {struct S* ps (struct S*)malloc(sizeof(struct S) 20);//这 20 个字节才是分配给柔性数组 arr 的return 0; }
http://www.ihoyoo.com/news/54226.html

相关文章:

  • 网站后台 批量上传vi品牌设计
  • 兰州市城乡建设局网官网站显示代码wordpress
  • 全面的网站建设ae模板下载
  • 西柏坡旅游网站建设规划书广州新建站
  • 荥阳网站开发广东企业网站seo哪里好
  • 建筑网站绿地新里城网站免费建站方法
  • 我做微信淘宝客网站wordpress 分类函数
  • 锦州网站建设排行榜开发高端网站建设
  • 如何注册域名并建设网站营销型网站建设哪家便宜
  • 张家港杨舍网站建设北京好的广告公司
  • 网站后台打开很慢做网站的前提
  • 做网站找我要服务器密码网站如何批量上传产品
  • 网站建设毕业设计综述济宁市环保局建设项目审批网站
  • 哪里学做网站二级子域名查询入口
  • 怎么备份网站数据库郑州设计公司招聘
  • 商业网站怎么做wordpress 多语言 插件
  • 婚纱摄影网站大全seo优化收费
  • 网站开发是什么环境建立一个平台需要什么
  • 360网站空间大学生电子商务大赛作品参考
  • 国外网站排名 top100大连市住建局官网
  • 海阳网网站怎么做高端网站
  • 有哪些免费做外贸网站营销网站建设哪里便宜
  • 做交网站如何自己设计一个网站
  • 网站建设项目怎么跟进客户模仿网站
  • 建设网站是做什么wordpress3.1
  • 网站建设选哪家环保东莞网站建设技术支持
  • 高端网站建设的介绍网站设计公司兴田德润信任高
  • 设计师图库网站深圳罗湖区网站开发公司
  • 网页与网站设计什么是抖动专业网站建设科技公司
  • 纪检网站建设山西省建设厅网站官网