C++动态内存的分配 (如有错误欢迎指正)

1*
C 库函数 void malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。
2

//int a1[1024003]={0};
//100k
3*4=1200k=1.2M
//超过了栈区的最大内存范围 程序崩溃

int a1;
a1=(int )malloc((int)(10241000
1000));//在堆上分配了大概1G的内存
a1[0]=0;
程序正常运行/

补充堆和栈的知识|||CSDN
堆和栈的理论知识
2申请方式
stack:
由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空

heap:
需要程序员自己申请,并指明大小,在c中malloc函数
如p1 = (char )malloc(10);
在C++中用new运算符
如p2 = new char[10];
但是注意p1、p2本身是在栈中的。
来源:

堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就
走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自
由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由
度大。 (经典!)
3
new int;//开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
newint(10);//开辟一个存放整数的空间,并指定该整数的初值为10,返回一个指向该存
储空间的地址
newchar[100];//开辟一个存放字符数组(包括100个元素)的空间,返回首元素的地址
newint[5][4];//开辟一个存放二维整型数组(大小为5
4)的空间,返回首元素的地址
float*p=newfloat(3.14159);//开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p
要注意的是新开辟的内存空间返回的都为首个元素的地址 所以都要用指针来接/
new 和delete 运算符的使用:
new 使用方法:
指针变量=new 类型(常量);
指针变量=new类型[表达式];
指针变量=new类型[表达式][表达式] //二维数组
作用:从堆上分配一块类型所指定的大小的储存空间,返回首地址
创建数组对象时,不能为对象指定初始值。
delete 使用方法:
delete 指针变量;
delete[] 指针变量;
作用:释放已分配的内存
例子:

int main(void)
{
	//第一种分配内存不进行初始化
	int *p1=new int;
	*p1=100;
	//第二种分配动态内存同时进行初始化	
	int *p2=new int(100);
	//两者等效
	//如果用malloc  malloc返回的是void*  要强制转换为int类型
	int *p3=(int*)malloc(sizeof(int));
}
free(p1);//基础类型可以混搭 就是可以混用
//delete p3;可以这样释放内存
//数组变量的分配
int main(void)
{
	int *p1=(int*)malloc(sizeof(int)*10);
int *p2=new int[10];
delete []p2;
free(p1);
//都是可以混搭的
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值