【c++修仙】c语言练气第九重动态内存管理

为什么要有动态内存

例如 int a=20   char arr[10]={10};

这些的内存是固定的

但是有时候我们需要的空间大小是在程序运行的时候才能知道的

malloc和free

void* malloc (size_t size)

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。

如果开辟成功,则返回一个指向开辟好空间的指针。 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查

返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定

void free (void* ptr);

拿来释放动态内存的

举个例子

#include <stdio.h>
int main()
{
 //代码1
 int num = 0;
 scanf("%d", &num);
 int arr[num] = {0};
 //代码2
 int* ptr = NULL;
 ptr = (int*)malloc(num*sizeof(int));
 if(NULL != ptr)//判断ptr指针是否为空
 {
 int i = 0;
 for(i=0; i<num; i++)
 {
 *(ptr+i) = 0;
 }
 }
 free(ptr);//释放ptr所指向的动态内存
 ptr = NULL;//是否有必要?
 return 0;
}

calloc

void* calloc (size_t num, size_t size);

函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。 与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。 举个例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int *p = (int*)calloc(10, sizeof(int));
 if(NULL != p)
 {
 //使用空间 }
 free(p);
 p = NULL;
 return 0;
}

realloc

他可以调整动态内存开辟的大小

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

ptr 是要调整的内存地址 size 调整之后新大小

几个常见的错误

对NULL指针的解引用

void test()
{
 int *p = (int *)malloc(INT_MAX/4);
 *p = 20;//如果p的值是NULL,就会有问题
 free(p);
}

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

void test()
{
 int i = 0;
 int *p = (int *)malloc(10*sizeof(int));
 if(NULL == p)
 {
 exit(EXIT_FAILURE);
 }
 for(i=0; i<=10; i++)
 {
 *(p+i) = i;//当i是10的时候越界访问
 }
 free(p);
}

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

void test()
{
 int a = 10;
 int *p = &a;
 free(p);//ok?
}

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

void test()
{
 int *p = (int *)malloc(100);
 p++;
 free(p);//p不再指向动态内存的起始位置
}

多次释放

用free(p)

free(p)释放两次

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/453767.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

环信ChatroomUIKit功能详解——超详细介绍

聊天室是当下泛娱乐社交应用中最经典的玩法&#xff0c;通过调用环信的 IM SDK 接口&#xff0c;可以快速创建聊天室。如果想根据自己业务需求对聊天室应用的 UI界面、弹幕消息、礼物打赏系统等进行自定义设计&#xff0c;最高效的方式则是使用环信的 ChatroomUIKit 。 文档地址…

抓包工具fiddler的使用

问题查询 定位bug是前端的问题还是后端的问题&#xff1f; 1.如果抓不到请求&#xff0c;显然就是前端的问题 2.如果有请求但是没有相应&#xff0c;那就是后端的问题 3.如果有请求也有相应&#xff0c;需要查看响应信息&#xff0c;如果返回报错了&#xff0c;则需要具体分析报…

模型量化(一)—— 非对称量化、对称量化(全代码)

模型量化是一种减少深度学习模型大小和提高推理速度的技术&#xff0c;通过降低模型参数的精度&#xff08;例如&#xff0c;从32位浮点数减少到8位整数&#xff09;来实现。 量化三个好处&#xff1a; 更少的内存消耗(对于智能手机等端侧设备很重要)更少的推断时间&#xff…

一道AI做过的小学奥数题,结果表明:今天的AI已经达到精神病人的智力水平

重庆家长找AI计算的小学奥数题&#xff0c;AI没有找到答案。也就是被吹上天的AI其实根本不具有人类智能。但不妨把AI理解为精神病人&#xff0c;因为他们有异常的艺术天赋。 两地A、B之间相距4000m&#xff1b;甲从A地以匀速60m/min向B出发&#xff0c;同时乙从B地出发以匀速26…

toJSONString空值被忽略解决办法 toJSONString过程中时间格式丢失问题解决办法

toJSONString空值被忽略解决办法 原代码&#xff1a; GcGarbageBuildingDO data gcGarbageBuildingService.get(id); result.putAll(JSON.parseObject(JSON.toJSONString(data), Map.class));查询出来的data中部分字段值为null&#xff0c;在toJSONString的过程中会把null值…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的车牌检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本篇博客详细介绍了如何利用深度学习技术开发一个先进的车牌检测系统&#xff0c;并附上了完整的实现代码。系统核心采用了强大的YOLOv8算法&#xff0c;并对前代版本如YOLOv7、YOLOv6、YOLOv5进行了详尽的性能评估&#xff0c;包括mAP和F1 Score等关键指标的对…

重建大师模型构建精细网格失败是什么原因导致的呢?(如下图)

出现图中的报错一般是显存溢出、瓦块过大造成的。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS信息及像控点&#xff0c;输出高精度彩色网格模型&#xff0c;可一键完成空三、自动建模和…

如何获取免费格式转换器MP3?全平台最新的20款软件推荐

随着数字音乐的普及&#xff0c;MP3格式已经成为了最为常见的音频格式之一。然而&#xff0c;有时我们可能会遇到需要转换音频格式的情况&#xff0c;比如将其他格式的音频文件转换为MP3格式。在这种情况下&#xff0c;一款好用的格式转换器就显得尤为重要。本文将为您推荐20款…

第14届环境与农业工程国际会议(ICEAE 2024)即将召开!

2024年第14届环境与农业工程国际会议&#xff08;ICEAE 2024&#xff09;将于6月7日至9日在泰国曼谷召开。本次会议旨在促进环境与农业工程的研究和开发活动&#xff0c;共同探讨领域内最新以及具有根本性的进展突破。热忱欢迎从事相关领域研究的专家&#xff0c;学者和专业技术…

YOLOv9改进项目|关于本周更新计划的说明24/3/12

目前售价售价59.9&#xff0c;改进点30个 专栏地址&#xff1a; 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 日期&#xff1a;24/3/12 本周更新计划说明&#xff1a; 1. 更新华为Gold YOLO中的…

人工智能迷惑行为大赏!

目录 人工智能迷惑行为大赏 一&#xff1a;人工智能的“幽默”瞬间 1. 图像识别出现AI的极限 2. 小批量梯度下降优化器 3. 智能聊天机器人的冰雹问题 4. 大语言模型-3经典语录 二&#xff1a;技术原理探究 1. 深度学习 2. 机器学习 3. 自然语言处理 4. 计算机视觉 三…

[Java、Android面试]_02_HashMap的原理

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料&#xff0c;感兴趣的朋友可收藏关注。由于时间有限&#xff0c;只能每天整理一点&#xff0c;分享一点儿&#xff01; 现分享如下&#xf…

读西游记第一回:西游记世界格局

天地之数&#xff1a; 元&#xff1a;十二万九千六百岁&#xff08;129600年&#xff09; 1元12会&#xff1a;子、丑、寅、卯、巳、午、未、申、酉、戌、亥。每会18000年。与12地支对应。 亥会期&#xff1a;前5400年混沌期&#xff0c;后5400年&#xff0c;盘古开天辟地&am…

【STL】stack栈容器与list链表容器

1.栈stack 栈具有先进后出的特性&#xff0c;最先进入的数据压在最底下&#xff0c;最后出来 2.list链表容器 list链表容器是一种双向链表&#xff0c;两端都可插入与删除&#xff0c;是双向访问迭代器&#xff0c;与vertor随机访问迭代器有不同的区别 reverse&#xff08;&…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Toggle)

组件提供勾选框样式、状态按钮样式及开关样式。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 仅当ToggleType为Button时可包含子组件。 接口 Toggle(options: { type: ToggleType, is…

2024-Android大厂(字节跳动,腾讯

PS&#xff1a;全文点击蓝色文字&#xff0c;即可跳转链接 【字节面试官&#xff1a;看了3000多份简历&#xff0c;面试1000场后&#xff0c;想给金九银十找工作的程序员几点建议附大厂真题面经】 本文主要介绍校招&#xff0c;上半年疫情原因真正面试的时间和机会也不多&#…

网络流量监控软件AnaTraf:优化性能、排除故障的最佳选择

目录 导言 网络流量监控的重要性 AnaTraf网络万用表的功能与优势 网络故障排除与优化网络性能 结论 导言 在当今数字化时代&#xff0c;计算机网络已经成为企业和组织的核心基础设施。然而&#xff0c;网络流量的管理和监控对于确保网络性能的稳定和优化至关重要。本文将介…

11双体系Java学习之方法

方法简述 package method;public class Demo01 {//main 方法public static void main(String[] args) {//实际参数&#xff1a;实际调用传递给他的参数int sum add (1,2);System.out.println(sum);//test();}//加法//形式参数&#xff0c;用来定义作用的public static int add…

工作中常用的git命令

git 分布式版本控制系统。 使用远程仓库时候会有多个协议可以选择&#xff0c;使用https不仅仅速度慢&#xff0c;而且每次push都要输入口令。 HEAD 当前版本的指针&#xff0c;当切换本地版本的时候会快速指向指定版本文件 master git为我们创建主分支 origin 远程仓库的名…

以102flowers数据集为例训练ResNet50模型

以102flowers数据集为例训练ResNet50模型 使用飞桨高阶API&#xff0c;使用最少的代码量&#xff0c;实现在102flowers数据集训练ResNet50模型。同时可以一条命令修改成Mnist、Cifar10、Cifar100等数据集&#xff0c;换成其它模型也是只需要一句话代码。 数据集介绍 102flowe…