C++Note 内存分区 栈区 堆区 堆区变量和数组的释放
栈区:
由编译器自动分配和释放 存放函数的参数值 局部变量等
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放
func()执行完毕时,a使用的内存已经释放 cout输出乱码
不要返回局部变量的地址
堆区:
由程序员分配释放 若程序员不释放 程序结束时由操作系统回收
在C++中主要利用 new 在堆区开辟内存
1 #include <iostream> 2 using namespace std; 3 4 int* func() 5 { 6 //利用new关键字 可以将数据开辟到堆区 本函数是指针函数 返回值为指针 a为指针变量 7 //指针本质也是局部变量 放在栈上 指针保存的数据是放在了堆区 8 int* a = new int(10);//在堆区new一个整型区域 存放整型变量 10 9 return a; 10 } 11 int main() 12 { 13 int* p = func(); 14 cout << *p << endl; // 10 15 cout << *p << endl; // 10 16 system("pause"); 17 return 0; 18 }
C++中利用new操作符在堆区开辟数据
释放利用操作符用 delete
语法: new 数据类型
利用new创建的数据 会返回该数据对应的类型的指针
1 #include <iostream> 2 using namespace std; 3 4 int* func() 5 { 6 //在堆区创建整型数据 7 //new返回是 该数据类型的指针 8 int* p = new int(10); 9 return p; 10 } 11 void test01() 12 { 13 int* p = func(); 14 cout << *p << endl;//10 15 cout << *p << endl;//10 16 //堆区的数据 由程序员管理开辟 程序员管理释放 17 //如果要释放 利用关键字delete 18 delete p;//释放指针p 即地址 19 //cout << *p << endl;//弹出异常 内存已被释放 20 //前面两个 *p正常输出 21 } 22 void test02() 23 { 24 //创建10个整型的数组 在堆区 25 int* arr = new int[10];//10代表数组有10个元素 返回数组的首地址 26 for (int i = 0; i < 10; i++) 27 { 28 arr[i] = i + 100;//给10个元素赋值 100~109 29 } 30 for (int i = 0; i < 10; i++) 31 { 32 cout << arr[i] << endl; 33 } 34 //释放堆区数组 35 delete[] arr;//加[]表明 释放数组 36 } 37 int main() 38 { 39 //test01(); 40 test02(); 41 system("pause"); 42 return 0; 43 }
函数指针和指针函数: 指针函数是返回指针的函数,函数指针是指向函数的指针
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)