c++ 指针释放问题

测试一:char*aa="abcdefg";deleteaa;//错误!!!程序崩溃测试二stringstr="abcdefg";intlg=str.length();c... 测试一:char * aa="abcdefg";delete aa; // 错误!!!程序崩溃
测试二string str="abcdefg";int lg=str.length(); char *bb=new char[lg+1]; strcpy_s(bb,lg+1,str.c_str());
delete [] bb; // 正确
为什么直接赋值 释放指针错误?难道不需要释放指针吗
展开
 我来答
flames85
推荐于2017-10-05 · 超过21用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:59.8万
展开全部
char * aa="abcdefg";这种写法没有申请内存。所以不需要delete。有new才有delete。
char * aa="abcdefg";这种写法是非常不可取的。可以写成const char* aa = "abcdefg"; 这一块内存指向的区域无法修改值。如果改值就会崩溃。
lch743
2013-08-01 · TA获得超过1181个赞
知道小有建树答主
回答量:377
采纳率:50%
帮助的人:357万
展开全部
delete bb是bb[0]调用了析构函数,delete[] bb相当于所有对象都调用了析构函数。

一个简单的原则是:new和delete,new[]和delete[] 成对出现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yanzhuomin
2013-08-01
知道答主
回答量:11
采纳率:0%
帮助的人:3.9万
展开全部
new的数据是在堆区,才需要释放给别的程序。 直接定义的变量在栈区不需要你去释放 函数结束自然就释放了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
snoopylie
2013-08-01 · TA获得超过1275个赞
知道小有建树答主
回答量:2396
采纳率:33%
帮助的人:797万
展开全部
谁new谁释放,你没new就不要释放。

测试一的aa执行指向静态存储区,是不可修改的。当然也不可释放。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式