C++指针与内存分配

2022-08-06 14:28:20

指针与内存分配

Thanks for
注意栈空间与堆空间都是有限的,因而可能出现空间过大的状态,将大的数组放在全局数据。
在这里插入图片描述
在这里插入图片描述
1.静态数据区
在这里插入图片描述
内存连续分配,数据的地址与分配顺序有关

2.栈空间
栈是一种先进后出的数据结构
函数内定义的局部变量函数参数都在栈空间分配.
栈空间中内存连续分配,数据的地址顺序与数据分配的先后顺序相反.
每个线程(程序)的栈空间独立且大小有限,栈空间分配完之后会发生栈溢出错误.所以:
不能在函数内部定义大型数组
不能调用嵌套层次过多的递归函数

3.堆空间
内存分配不一定连续

关于new与delete
1.new与delete都不是函数

2.申请一个单变量空间

classA*pA=newA(10);//可以看出new不仅为此指针分配了空间还将此空间初始化delete pA;

通过此例子我们可以看出new与delete不仅可以分配空间还可以有构造与析构函数

3.申请一个数组空间

string*psa=new string[10];//array of 10 empty stringsint*pia=newint[10];//array of 10 uninitialized intsdelete[] psa;delete[] pia;

这里的new[ ] 多分配了一个空间给这个序列存储大小供delete删除

没有默认构造函数的情况下:

#include<iostream>classA{public:int a;explicitA(int b):a(b){}};intmain(){auto a=new A[3]{A(1),A(2),A(3)};
	std::cout<< a[2].a;}

或者

classA{int a;public:A(int b):a(b){}};intmain(){auto a=new A[3]{1,2,3};}

4.二维数组的分配与释放

分配空间:

int**array;//首先声明一个二维数组指针
array=newint*[10];//接下来分配一个一维指针数组for(int i=0;i<10;i++)//对每个元素进行分配空间
         array[i]=newint[5];

释放空间:

for(i=0; i< m; i++)delete[] p[i];delete[] p;
  • 作者:eryihahaha
  • 原文链接:https://blog.csdn.net/weixin_45683677/article/details/104520133
    更新时间:2022-08-06 14:28:20