8.动态内存申请

知识点一:malloc函数和free函数

malloc函数

头文件:#include<stdlib.h>#include<string.h>    // 用于memset函数的头文件
void *malloc(unsigned int num_ size);
形参: num_ size需要申请空间大小的字节数。
返回值:成功:返回空间的起始地址失败: NULL
特点:1、对于malloc的返回值一般要强制类型转换再赋值保存(返回值就是开辟对应的空间)2、malloc申请的空间内容不确定一般使用memset进行清空3、多次调用malloc第1次malloc 和 第2次malloc的地址不一定连续

free函数

void free(void *addr);        ()里面是保存malloc保存返回值的指针变量名
//功能:释放堆区空间
#include<stdio.h>
void test1()
{int *addr = NULL;addr = (int *)malloc(sizeof(int));    // (强转类型 *)malloc(n * sizeof(类型))    n:无符号整数 ()里面的字节数是n乘类型的字节数if(addr == NULL){printf("malloc err\n");}printf("*addr = %d\n",addr);    //不确定值 //对堆区空间清零memset(addr,0,sizeof(int));printf("*addr = %d\n",*addr);//对addr的空间 进行读 写*addr = 1000;     //写//读printf("*addr = %d\n",*addr);     //1000//释放堆区空间 空间使用权限的回收是否对空间内容清0这是不确定的free(addr); 
}
int main(int argc,char *argv[])
{test1();
}

知识点二:calloc函数

头文件:#include<stdlib.h>
void * calloc(size_t nmemb,size_ t size);    // (强转类型 *)calloc(n,sizeof(类型))    n:无符号整数 ()里面的字节数是n乘类型的字节数
参数:1、nmemb中请的数据块数2、size 每一块大小3、申请总大小 = nmemb*size
返回值:成功:返回空问的起始地址失败:返回NULL
特点:申请的空间自动清零,不需要memset清零

知识点三:realloc动态追加或减少空间

#include<stdlib.h>
void* realloc(void *S,unsigned int newsize);    //(强转类型 *)realloc(保存原先开辟内存的指针名,(原先空间+新增空间)sizeof(类型))
参数: s:原先开辟内存的首地址newsize: 新申请的空间的总大小(原先+新增部分大小)(如果新申请的空间比原先大,则是追加,如果比原先小,则是减少)
返回值:新申请的内存的首地址
realloc的返回值一般要强制类型转换再赋值保存(返回值就是开辟对应的空间)

功能:

    在原先s指向的内存基础.上重新申请内存,新的内存的大小为new_ size 个字节,如果原先内存后面有足够大的空间,就追加,如果后边的内存不够用,则relloc函数会在堆区找一个newsize个字节大小的内存申请,将原先内存中的内容拷贝过来,然后释放原先的内存,最后返回新内存的地址

知识点四:堆区空间使用的注意事项

void test1()
{int *p2 = NULL;int *p3 = NULL;//1、指向堆区空间的指针变量不要随意的更改指向int *p=(int *)calloc(1, sizeof(int)) ;int num = 10;p = &num;    //p指向num导致calloc申请的空间泄露//2、不要操作已经释放的空间p2 = (int *)calloc(1,sizeof(int));*p2 = 1000;//释放该空间free(p2) ;printf("*p2 = %d\n,*p2);	//不确定//3、不要对堆区空间重复释放p3 = (int *)calloc(1, sizeof(int));free(p3);free(p3);//多次释放
}

知识点五:防止多次释放

void test09 ()
{int *p=(int *)calloc(1,sizeof(int));if(p != NULL)    //防止多次释放{free(p);p=NULL;}if(p != NULL)    {free(p);p=NULL;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARMxy赋能温室环境自动化调控

智慧农业正以其独特的魅力描绘着未来的轮廓。作为这一变革的中坚力量&#xff0c;ARMxy工业计算机凭借其高性能、低功耗及高度灵活性&#xff0c;正逐步成为智能温室控制、精准灌溉及作物生长监测领域的核心引擎。 智能温室的智慧大脑 位于某地的现代农业园区&#xff0c;一座…

力扣118. 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1…

绝密级的高考考卷大揭秘

今天既是端午节也是高考的最后一日。我相信各位考生在这个举国欢庆的日子都有着属于自己的惬意和喜悦。今日起&#xff0c;我将重启我的情报输出&#xff0c;但是在这个欢乐的小长假中就先来一个有趣的小文案。 一、出题者 一份高考试卷安全无虞地出现在考生面前&#xff0c;…

Python图像处理入门学习——基于霍夫变换的车道线和路沿检测

文章目录 前言一、实验内容与方法二、视频的导入、拆分、合成2.1 视频时长读取2.2 视频的拆分2.3 视频的合成 三、路沿检测3.1 路沿检测算法整体框架3.2 尝试3.3 图像处理->边缘检测(原理)3.4 Canny算子边缘检测(原理)3.5 Canny算子边缘检测(实现)3.5.1 高斯滤波3.5.2 图像转…

软件游戏steam_api.dll丢失的解决方法,总结5种有效的方法

在玩电脑游戏时&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“游戏缺少steam_api.dll”。这个问题可能让很多玩家感到困惑和烦恼。那么&#xff0c;究竟是什么原因导致游戏缺少steam_api.dll呢&#xff1f;又该如何解决这个问题呢&#xff1f;本文将为大家…

ISO 19115-2:2019 第6章 获取和处理元数据

6 获取和处理元数据 6.1 获取和处理要求的元数据 ISO 19115-1 确定了描述数字地理资源所需的元数据。本文件扩展了 ISO 19115-1 中确定的元数据,并确定了描述地理资源获取和处理所需的附加元数据。 6.2 获取和处理元数据包及其依赖关系 ISO 地理信息系列标准使用一个或多个…

C# 类或结构体的成员

字段&#xff08;Field&#xff09;属性&#xff08;Property&#xff09;方法&#xff08;Method&#xff09;构造函数&#xff08;Constructor&#xff09;索引器&#xff08;Indexer&#xff09;事件&#xff08;Event&#xff09;嵌套类型&#xff08;Nested Type&#xff…

反射学习记

Java 中的反射是什么意思&#xff1f;有哪些应用场景&#xff1f; 每个类都有⼀个 Class 对象&#xff0c;包含了与类有关的信息。当编译⼀个新类时&#xff0c;会产生一个同名的 .class 文件&#xff0c;该⽂件 内容保存着 Class 对象。类加载相当于 Class 对象的加载&a…

2024.6.10刷题记录

目录 一、881. 救生艇 贪心-排序-双指针 二、8. 字符串转换整数 (atoi) 1.模拟-未考虑溢出 2.考虑溢出问题 三、9. 回文数 1.双指针-字符串 2.数字翻转 3.数字翻转-只翻转一半 一、881. 救生艇 贪心-排序-双指针 class Solution:def numRescueBoats(self, people: Li…

IoC容器加载流程

IoC容器加载流程 流程主要分为两个阶段&#xff1a; Bean的配置解析阶段&#xff1a;将Bean的配置信息转换成BeanDefinitionBean的创建阶段&#xff1a;根据BeanDefinition进行Bean创建 1. 加载流程 1.1 配置解析 加载流程&#xff1a; 资源文件定位&#xff1a;一般是在…

接口测试时, 数据Mock为何如此重要?

一、为什么要mock 工作中遇到以下问题&#xff0c;我们可以使用mock解决&#xff1a; 1、无法控制第三方系统某接口的返回&#xff0c;返回的数据不满足要求 2、某依赖系统还未开发完成&#xff0c;就需要对被测系统进行测试 3、有些系统不支持重复请求&#xff0c;或有访问…

Qt安装时出现无法下载存档,环境配置,main中自定义类编译不过问题

1. Qt安装时出现无法下载存档 进入Qt安装程序exe所在的文件目录&#xff0c;一般在下载文件夹&#xff0c;右键打开cmd。cmd输入&#xff1a;对应的exe镜像提速。 .\qt-online-installer-windows-x64-4.8.0.exe --mirror https://mirrors.cloud.tencent.com/qt/ 2. 环境配置 …

构建SOA架构时应该注意的问题

1.原有系统架构中的集成需求 面向服务的体系结构本质上来说是一种具有特殊性质的体系结构&#xff0c;它由具有互操作性和位置透明的组件集成构建并互连而成。基于SOA的企业系统架构通常都是在现有系统架构投资的基础上发展起来的&#xff0c;我们并不需要彻底重新开发全部的子…

Jmeter压测 —— 1秒发送1次请求

场景&#xff1a;有时候测试场景需要设置请求频率为一秒一次&#xff08;或几秒一次&#xff09;实现方法一&#xff1a;1、首先需要在线程组下设置循环次数&#xff08;可以理解为请求的次数&#xff09; 次数设置为请求300次&#xff0c;其中线程数跟时间自行设置 2、在设置…

XSS(跨站脚本攻击)

1.什么是xss XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了 XSS&#xff0c;是最常见的Web应用程序安全漏洞之一,XSS是指攻击者在网页中嵌入客户端脚本&#xff0c;通常是JavaScript编写…

2002NOIP普及组真题 1. 级数求和

线上OJ&#xff1a; 【02NOIP普及组】级数求和 核心算法&#xff1a;暴力模拟 备注&#xff1a;此类题&#xff0c;考场上也可以考虑 打表 题解代码&#xff1a; #include <bits/stdc.h> using namespace std;int k, n 0; double s 0; int main() {scanf("%d&q…

【AI学习】OpenAI员工谈消融实验

jbetker&#xff08;OpenAI员工&#xff09;的博客不长&#xff0c;很好读&#xff0c;但是内容却别开生面、非常有见底。 消融实验真的很重要 我不再像以前那样阅读那么多论文了。这让我感到惊讶&#xff0c;因为我一直认为&#xff0c;当我把机器学习作为全职工作时&#x…

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册

晨控CK-UR12-E01与欧姆龙NX/NJ系列EtherNet/IP通讯手册 晨控CK-UR12-E01 是天线一体式超高频读写器头&#xff0c;工作频率默认为902MHz&#xff5e;928MHz&#xff0c;符合EPC Global Class l Gen 2&#xff0f;IS0-18000-6C 标准&#xff0c;最大输出功率 33dBm。读卡器同时…

爬山算法详细介绍

爬山算法介绍 爬山算法&#xff0c;又称局部搜索算法或局部择优方法&#xff0c;是一种基于贪婪策略的优化算法。它采用启发式方法&#xff0c;是对深度优先搜索的一种改进&#xff0c;利用反馈信息帮助生成解的决策。其基本思想是从当前位置开始&#xff0c;在周围邻域内寻找…

Kubernetes学习总结知识点汇总

Kubernetes 是一个开源的容器编排系统&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 设计并捐赠给 Cloud Native Computing Foundation&#xff08;CNCF&#xff09;来维护。Kubernetes 提供了一个运行分布式系统的框架&#xff0c;能够无缝地扩展和…