C++程序的内存分区模型-栈区堆区

点击蓝字

868413ff1165985a94f037ad054e4c17.png

关注我们

1、栈区:

由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死”)

注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放


栈区代码演示:

//内存四区-栈区
/* 栈区:
由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死”)
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
*/
#include <iostream>
using namespace std;//栈区数据注意事项 --- 不要返回局部变量的地址
//栈区数据由编译器管理开辟和释放int * func(int b) //形参数据也会放到栈区
{b = 100;int a = 10; //局部变量 存放在栈区,栈区的数据在函数执行完后自动释放,当此函数执行完,栈上的数据就清空了retern &a;  //返回局部变量的地址
}
int main() {//接受func函数的返回值int * p = finc(1);cout << *p << endl; //第一次可以打印正确的数字,是因为编译器做了一次保留cout << *p << endl; //第二次这个数据就不再保留了return 0;
}

2、堆区:

由程序员分配释放,若程序员不释放,程序结束后由操作系统回收(运行期间你不管,它就不释放。运行结束就给他回收掉)

在C++中主要利用new在堆区开辟内存


堆区代码演示:

/* 堆区:* 由程序员分配释放,若程序员不释放,程序结束后由操作系统回收(运行期间你不管,它就不释放。运行结束就给他回收掉)* 在C++中主要利用new在堆区开辟内存*/
#include <iostream>
using namespace std;int * func()
{//利用new关键字 可以将数据开辟到堆区//指针本质也是局部变量,放在栈上,指针保存的数据是放在堆区int * p = new int (10); //用指针去接收这块内存,new创建这块内存,把地址返回给你return p;
}
int main() {//在堆区开辟数据int *p = func();cout << *p << endl;cout << *p << endl;cout << *p << endl;cout << *p << endl; //一直存活return 0;
}

3、new操作符:

C++中利用new操作符在堆区开辟数据

堆区开辟数据,由程序员手动开辟,手动释放,释放利用操作符delete

语法:new 数据类型

利用new创建的数据,会返回该数据对应的类型的指针


new操作符代码演示:

#include <iostream>
using namespace std;//1、new的基本语法
int * func()
{//在堆区创建整型数据//new返回的是:该数据类型的指针int * p = new int(10);return p;
}void test01()
{int * p = func();cout << *p << endl;cout << *p << endl;cout << *p << endl;//堆区的数据由程序员管理开辟,程序员管理释放//如果想释放堆区的数据,利用关键字deletedelete p;cout << *p << endl; //此处程序报错:内存已经释放,再去访问就是非法操作
}//2、在堆区利用new开辟数组
void test02()
{//创建10整型数据的数组,在堆区int * arr = new int [10]; //10代表数组有10个元素for(int i=0;i<10;i++){arr[i]=i+100;//给10个元素赋值100~109}for(int i=0;i<10;i++){cout<<arr[i]<<endl;}//释放堆区数组//释放数组的时候,要加一个[]才可以delete[] arr;
}
int main() {//test01();test02();return 0;
}

acb415679f9f6d4aeb4a9be1f23d8fbb.gif

如果你年满18周岁以上,又觉得学【C语言】太难?想尝试其他编程语言,那么我推荐你学Python,现有价值499元Python零基础课程限时免费领取,限10个名额!
▲扫描二维码-免费领取

37f4c56721480484610828e9a2386566.gif

戳“阅读原文”我们一起进步

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

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

相关文章

CocosStudio的节点如何使用自定义shader

CocosStudio的节点如何使用自定义shader问题&#xff1a;我想对CocosStudio 的 某个UI 里的 某个图片&#xff08;如下图所示的Image类型&#xff09;使用自定义shader。但是&#xff0c;我把 对传统的cc.Sprite应用自定义shader的方式 应用于它时&#xff0c;并不生效&#xf…

excel随机抽取_简单随机抽样及其进阶分层随机抽样方法展示

一、分享简单随机抽样的几种方法1、抽样分析工具抽样2、INDIRECTRANDBETWEEN函数抽样3、RAND排序抽样4、SAS抽样二、分层抽样方法1、Python分层抽样2、SAS分层抽样3、EXCEL函数及功能分层抽样简单随机抽样的几种方法方法一抽样分析工具抽样如果你的EXCEL尚未安装数据分析&#…

为什么存在动态内存分配,动态内存函数(malloc函数,free函数,calloc函数,realloc函数)...

点击蓝字关注我们1.当前我们知道的内存的使用方法2.为什么存在动态内存分配如上我们已学的开辟空间的方式有两个特点&#xff1a;空间开辟的大小是固定的必须指定数组的长度所以就产生了空间开大了浪费开小了不够用的问题&#xff0c;所以使用动态内存分配3.动态内存函数&#…

C++ vector类的模拟实现

点击蓝字关注我们1.前言vector和string虽然底层都是通过顺序表来实现的&#xff0c;但是他们利用顺序表的方式不同&#xff0c;string是指定好了类型&#xff0c;通过使用顺序表来存储并对数据进行操作&#xff0c;而vector是利用了C中的泛型模板&#xff0c;可以存储任何类型的…

visual studio源文件的编译顺序是依据什么?

问题&#xff1a;visual studio源文件的编译顺序是依据什么&#xff1f; 结论&#xff1a;依据 .vcxproj 文件里 指定了ClCompile的ItemGroup &#xff0c;如下图所示&#xff0c;就是这么简单粗暴。

功能齐全的屏幕截图C++实现详解

点击蓝字关注我们1、概述要使用屏幕截图&#xff0c;其实很容易&#xff0c;装一款聊天软件或者办公软件就可以了&#xff0c;比如QQ、企业微信、钉钉、飞书等。但要开发出类似这些软件的屏幕截图模块&#xff0c;则没那么容易。其实实现屏幕截图的技术并不复杂&#xff0c;主要…

如何判断exe文件是debug还是release编译生成的

如何判断exe文件是debug还是release编译生成的结论&#xff1a; 用IDA工具打开exe&#xff0c;然后看Imports里面的依赖库是否有带d或D结尾的&#xff0c;如果有就说明是Debug的 实验&#xff1a;&#xff08;实验环境 vs2017&#xff0c; IDA工具&#xff09; &#xff08;0&…

大屏可视化分配率是什么意思_什么是分配率?

大屏可视化分配率是什么意思诸如“不可持续的分配率”和“您需要保持较低的分配率”之类的短语似乎仅属于Java Champions的词汇表。 复杂&#xff0c;恐怖并被魔术光环包围。 经常发生的情况是&#xff0c;当您更仔细地查看概念时&#xff0c;魔术会随着抽烟消失。 这篇文章试…

C/C++语言动态开辟的杨辉三角

点击蓝字关注我们问题引入杨辉三角相必大家并不陌生&#xff0c;第1行有1列、第二行有2列…第n行有n列&#xff0c;且每行行首和行尾的值都为1&#xff0c;其余的值为上一行两数相加我们在C语言阶段&#xff0c;第一次碰到的杨辉三角应该都是用常规的二维数组存储&#xff0c;可…

git gui 历史版本_这些Git命令都不会,还是不要去面试了

前言以下&#xff0c;项目中经常使用的Git命令&#xff0c;汇总到这里以便与你能快速的学习和掌握Git命令&#xff0c;在文章最后有惊喜哟&#xff0c;一定要看到最后啊&#xff01;使用的 Git版本&#xff1a;git version 2.24.0命令git log# 输出概要日志,这条命令等同于# gi…

java restful_Java EE中的RESTful计时器

java restful在这篇文章中...。 EJB计时器旋风之旅 通过带有示例实现的简单REST接口即时使用EJB计时器 更新&#xff08;2015年7月14日&#xff09; 该应用程序的前端现在可以在OpenShift上使用 。 由于我是前端新手&#xff0c;因此我在其他来源的帮助下组装了此HTML5 Ang…

c# 联合halcon 基于相关性 模板匹配_机器视觉之halcon入门(5)-字符识别exe生成...

2.3.2 第二个halcon程序转EXE程序&#xff1a;字符识别老规矩&#xff0c;每一段halcon代码得用C#二次开发下。根据上一节所教的&#xff0c;我们配置下C#的环境&#xff0c;顺便添加好控件&#xff0c;如下图(2-3-2-1)。图 2-3-2-1控件基本跟上一节一样&#xff0c;只是少了一…

C语言数据的存储和取出(超详细讲解)

点击蓝字关注我们整形的储存我们知道一个整形的存储是以补码的形式储存取出是原码的形式。比如&#xff1a;int a 5;的二进制是101那它的原码应该是&#xff1a;00000000 00000000 00000000 00000101正数的原反补相同那它存进去和取出来都是&#xff1a;00000000 00000000 000…

打印pdf就一页_PDF 文件转换工具

是将 PDF 文件转换为完全可编辑的 Windows 文档最好的转换软件。无论您需要您的内容是 Microsoft Word、Excel、PowerPoint、HTML 还是仅需要文本&#xff0c; 总会给您一个简单的方法&#xff0c;快捷地获取您要的内容。可转换整个文档或选择内容。亦可创建 PDF 文件。PDF 转换…

C++类的this指针,静态成员,友元函数友元类

点击蓝字关注我们1. this指针在上篇讲C中类&#xff0c;对象&#xff0c;封装&#xff0c;继承&#xff08;派生&#xff09;&#xff0c;多态的时候&#xff0c;this指针出现在成员函数中&#xff0c;并使用->成员提取符操作成员变量。在 C 中&#xff0c;每一个对象都能通…

批量提取文件创建时间_批量采集新浪微博用户内容

有时我们需要把某些用户的微博数据全部采集下来用作分析&#xff0c;每条信息复制的工作量是非常低效的&#xff0c;必须要借助工具。今天给大家介绍一款采集软件&#xff1a;微风采集器。打开软件&#xff0c;选择模板&#xff0c;下拉框选&#xff1a;批量提取指定用户微博内…

C++异常的规则

点击蓝字关注我们异常是指存在于程序运行时的异常行为&#xff0c;这些行为超出了函数正常功能的范围&#xff0c;当程序的某部分检测到一个无法处理的问题时&#xff0c;就需要用到异常处理。1. C语言中传统的处理错误方式终止程序&#xff1a;如assert&#xff0c;当发生错误…

异质性查询需要为连线设定_振奋人心!华东理工大学开发新型的荧光染料,为细胞成像奠定基础...

结合并激活荧光染料的适体荧光RNA(FR)已用于对丰富的细胞RNA种类进行成像。然而&#xff0c;诸如低亮度和具有不同光谱特性的染料/适体组合的有限可用性的局限性&#xff0c;限制了这些工具在活的哺乳动物细胞和体内的使用。最近&#xff0c;华东理工大学朱麟勇及杨弋共同通讯在…

C++ STL详解(1)

点击蓝字关注我们概述STL 是“Standard Template Library”的缩写&#xff0c;中文译为“标准模板库”。STL 是 C 标准库的一部分&#xff0c;不用单独安装。C 对模板&#xff08;Template&#xff09;支持得很好&#xff0c;STL 就是借助模板把常用的数据结构及其算法都实现了…

各种说明方法的答题格式_高中化学:选择题答题方法与知识点总结,让你轻松秒杀各种难题...

选择题是化学考试中被广泛采用的一种题型。它具有知识容量大&#xff0c;覆盖面广&#xff0c;构思新颖、灵活巧妙&#xff0c;考试的客观性强&#xff0c;答题简单&#xff0c;评分容易、客观准确等优点。 选择题按考查形式可分为三种类型&#xff0c;即&#xff1a;常规型选择…