C++之内存分区

C++程序在执行时,将内存大方向划分为4个区域

1.代码区:存放函数体的二进制代码,由操作系统进行管理;
2.全局区:存放全局变量和静态变量以及常量;
3.栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等;
4.堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

C++中主要利用new在堆区开辟内存,堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete。

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

int* func()//返回int指针的函数
{
	int* a = new int(10);
	return a;
}

int main() {
	int *p = func();
	cout << *p << endl;
	//利用delete释放堆区数据
	delete p;//要记得释放!!
	//cout << *p << endl; //报错,释放的空间不可访问
	system("pause");
	return 0;
}

new的释放:

delete p;//p不是数组变量
delete[] p;//p是数组

栈区的数据由编译器释放,因此函数中的局部变量不能作为地址或者引用返回

//错误示范1:
int * func()
{
	int a = 10;
//若是用static把局部变量变为静态变量,则可以用
//static int a =10;
	return &a;
}
int main() {
	int *p = func();
	cout << *p << endl;
	system("pause");
	return 0;
}


//错误示范2:
/返回局部变量引用
int& test01() {
	int a = 10; //局部变量
//若是用static把局部变量变为静态变量,则可以用
//static int a =10;
	return a;
}
int main()
{
	//不能返回局部变量的引用
	int& ref = test01();
	cout << "ref = " << ref << endl;
}

正确使用函数中局部变量作为值返回
例如:

#include <iostream>
using namespace std;

int test01() {
    int a = 10; //局部变量
	return a;
}
int main() {

	int ref = test01();
	cout << "ref = " << ref << endl;
}

相关推荐

  1. C++内存分区

    2024-03-25 15:40:05       43 阅读
  2. C++内存分区

    2024-03-25 15:40:05       53 阅读
  3. 6. C++ 内存分布

    2024-03-25 15:40:05       34 阅读
  4. C++服务内存分析

    2024-03-25 15:40:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 15:40:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 15:40:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 15:40:05       82 阅读
  4. Python语言-面向对象

    2024-03-25 15:40:05       91 阅读

热门阅读

  1. ChatGPT:开启智能对话,提升论文写作能力

    2024-03-25 15:40:05       35 阅读
  2. 线段树CF 练习题

    2024-03-25 15:40:05       45 阅读
  3. oppo,快手25届暑期实习内推

    2024-03-25 15:40:05       44 阅读
  4. 网络工程师软考中级考试大纲

    2024-03-25 15:40:05       41 阅读
  5. 贪心算法的魅力与应用

    2024-03-25 15:40:05       40 阅读
  6. node.js常用命令

    2024-03-25 15:40:05       35 阅读
  7. 概率论基础概念

    2024-03-25 15:40:05       40 阅读
  8. 多线程面试专题

    2024-03-25 15:40:05       36 阅读
  9. 分布式:这里详细的说一下分布式

    2024-03-25 15:40:05       44 阅读
  10. 分布式简介

    2024-03-25 15:40:05       45 阅读
  11. NPM常用命令详解

    2024-03-25 15:40:05       43 阅读
  12. 使用js判断元素是否在页面最上层且被展示

    2024-03-25 15:40:05       44 阅读
  13. CentOS DHCP服务器部署指南

    2024-03-25 15:40:05       46 阅读
  14. Sql Server小技能:row_number()函数

    2024-03-25 15:40:05       46 阅读
  15. 构建自我学习的世界模型:预测未来事件的发生

    2024-03-25 15:40:05       55 阅读