char* a;
char *b
a = new char[10];
b=a;
delete b;
a = null,b=null;
C++中我想进行以下类似操作,最后能把这个创建的空间释放掉吗
答案:2 悬赏:50 手机版
解决时间 2021-03-21 09:09
- 提问者网友:龅牙恐龙妹
- 2021-03-20 13:54
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-03-20 15:32
可以,a和b所指向的内存是相同的。
但程序有以下小bug:
1. C++标准中NULL是大写的。
2. 建议释放数组时用delete[]而不是delete,虽然针对基本类型这两者没有区别。
但程序有以下小bug:
1. C++标准中NULL是大写的。
2. 建议释放数组时用delete[]而不是delete,虽然针对基本类型这两者没有区别。
全部回答
- 1楼网友:不如潦草
- 2021-03-20 16:56
大致看了一下,你这个程序的问题是内存管理方面的问题。
而且你的程序在内存方面问题比较大。
1、一个临时对象开辟(new)了一个内存空间,没有及时释放,导致生命周期结束,最后没有就没有办法去释放掉;还有一个临时变量开辟了多次也没有释放。
比如 成员函数create(int n)中
lnode *p;
elemtype x;
int i=1;
while(i<=n)
{
cout<<"请输入第"<>x;
p=new lnode;//这里开辟了空间,后面没有释放
p->data=x;
p->next=head->next;
head->next=p;
i++;
}
临时变量p开辟了多次内存,每次都没有释放。
解决方法,可以考虑用成员指针变量pnode替代局部需要开辟的内存的地方。
2 内存管理另一个有效解决方法是。
在一个指针变量(比如 lnode * pnode )初始化的时候指向null,
new 和delete要配套使用,delete之后试该指针指向null,这样就可以避免被删掉的指针再次被删掉。
例如:
lnode *pnode=null;
//........函数代码
pnode=new lnode();//这里开辟给pnode开辟空间之后,pnode就不指向null了
//......函数代码
if(pnode!=null)//如果不指向null就执行下面代码
{
delete pnode;//如果开辟了数组空间就delete []pnode;
pnode=null;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯