C++中,new申请内存问题?

如题所述

这样是会有内存泄漏的,因为第一次执行s
=
new
stu;
后,系统申请了一块新的内存空间(类型为stu),并把其地址赋给s
第2此执行s
=
new
stu后,系统又申请了一块新的内存空间,并把其地址赋给s,此时把s原来的值覆盖掉了,也就是第一次申请的内存空间的地址丢失了
而delete
s;
只是把现在s指向的内存中的变量删除,这就把第二次申请的变量删除了,但是这样并不能将第一次申请的变量删除,因为其地址已经丢失掉了
就算你执行两次delete语句也是没有用的,这样就算编译器不报错,执行程序的时候都会报错,因为你删除了同一个地址两次
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-01
int*
a代表的是定义一个指针,这个指针指向的是一个int类型,
使用new的时候是表示在堆上开辟内存空间,
你第一个中new
int[10]
这里的10代表个数,这里表示,开辟一个可以容纳10个int的内存空间,
而下面这个只开辟一个,
这里你使用的是指针的方式访问数据,即使是上面中你可只能
*a=1;
*(a+1)=2;
你说这种情况一般编译器不会提示但是由于访问一个未知的内存就可能造成不确定的后果
第2个回答  2020-04-11
首先说明的是,a
不是数组,是一个指针。
int
*a=new
int[10];
是用new开辟一个10个int的数组的内存,把头指针赋值给a,所以a可以访问这些数组的数据,int
*a=new
int;
开辟一个int的内存空间,
至于引用a[100]当然可以,因为a是内存地址的指针,它一般能移动100次,但是它指的地方一般没初始化,所以可能会出现乱码,但是不会报错。
相似回答