返回信息流char* a()
{
char* b=new char[10];
for(int i=0;i<10;i++)
{
b[i]=i+48;
}
return b;
}
这个函数返回的是指针,函数生命周期结束后指针所指的内存区会不会被销毁,而使返回的指针指向无效区域呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #12285同步于 2008/9/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
这函数返回的指针指向的区域会不会被销毁呢?
bupo
2008/9/10镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
记得在哪里看过:
不会:1:new 分配的是在堆上,所以char [10]存在
2:实际上return b;返回的是什么?
其实是一个地址,也就是说是一个值,这个值是地址
所以这样完全可以
【 在 bupo (不破) 的大作中提到: 】
: char* a()
: {
: char* b=new char[10];
: ...................
一个new需要delete
这个不会销毁,你需要显式调用delete
【 在 bupo (不破) 的大作中提到: 】
: char* a()
: {
: char* b=new char[10];
: ...................
嗯,析构函数不知道什么运行。
【 在 bupo (不破) 的大作中提到: 】
: 哦,知道了~~
: 如果new的是个类类型,且有析构函数,那就会被销毁了。
haha lz问的是那个指针会不会被销毁从而指向一个未知的地方(也就是成为野指针)....
lz我没猜错你的意思吧,我原来也这样担心,于是我就多写了几个函数,里面多放几个
printf 一步步打印出地址(后来才发现用vc调试爽多了)...
【 在 BoyFisher (男孩之垂釣者|小龍快跑|八卦幫之火龍封印) 的大作中提到: 】
: 一个new需要delete
: 这个不会销毁,你需要显式调用delete
【 在 purevirtual 的大作中提到: 】
: haha lz问的是那个指针会不会被销毁从而指向一个未知的地方(也就是成为野指针)....
: lz我没猜错你的意思吧,我原来也这样担心,于是我就多写了几个函数,里面多放几个
: printf 一步步打印出地址(后来才发现用vc调试爽多了)...
哈哈~~被你看穿了~~
握手,不是看穿,我当年也是这么想的,只是那时候还不知道有论坛,又不会调试,只好自己“手工作坊”式的打印着实验.....
【 在 bupo (不破) 的大作中提到: 】
: 哈哈~~被你看穿了~~
函数里面new一个结构或者类,返回指针也不会销毁
需要在外面用完以后显示的delete
【 在 bupo (不破) 的大作中提到: 】
: 哦,知道了~~
: 如果new的是个类类型,且有析构函数,那就会被销毁了。