关于函数返回局部指针变量的问题

河豚 2012-04-26 11:27:29
#include "stdafx.h"
struct TEMP{
int a;
TEMP(int x){
a = x;
}
};
struct TEMP2{
int a;
};
TEMP * CreateTemp()
{
TEMP * t = new TEMP(5);
return t;
}
TEMP2 CreateTemp2()
{
TEMP2 t;
t.a = 5;
return t;
}
int main(int argc, char* argv[])
{ TEMP2 tMain2 = CreateTemp2();
printf("tMain2.a = %d\n",tMain2.a); 1//输出tMain2.a = 5;
TEMP *tMain = CreateTemp();
printf("tMain.a = %d!\n",tMain->a); 2//输出tMain.a = 5;
return 0;
}
此函数中1处函数CreateTemp2返回了TEMP2结构体的一个拷贝,所以此函数结束以后在主函数中调用tMain2.a获得的值是5.
但是2中为什么得到的结果也是5.
按理说2的地方CreateTemp函数返回了一个TEMP的指针,但是CreateTemp函数结束了以后那个TEMP指针不是应该释放了的嘛,
既然那个TEMP指针都已经释放了,那在外面调用的时候不是应该要报内存什么的错误吗?但是为什么还是会输出tMain.a=5?
请详细一点的解答一下。谢谢
...全文
64 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2012-04-26
  • 打赏
  • 举报
回复
可以想想,和它一样的道理
CString str = XXX(xxx);

CString XXX(xxx)
{
CString str = ....;
return str;
}
Eleven 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
那在函数中局部变量所申请到得内存在什么时候才被销毁呢?
如果是在程序结束才销毁。那么现在有一个程序,需要不停的调用这个函数,并且此程序联系工作好几个月不关闭。
这样的话不就会造成内存不够用?
[/Quote]
TEMP2 tMain2 = CreateTemp2();
这里会调用默认的拷贝构造函数,当构造tMain2对象的时候
河豚 2012-04-26
  • 打赏
  • 举报
回复
那在函数中局部变量所申请到得内存在什么时候才被销毁呢?
如果是在程序结束才销毁。那么现在有一个程序,需要不停的调用这个函数,并且此程序联系工作好几个月不关闭。
这样的话不就会造成内存不够用?
shn521 2012-04-26
  • 打赏
  • 举报
回复
TEMP * CreateTemp()
{
TEMP * t = new TEMP(5);
return t;
}
在堆中申请内存,不随函数结束而销毁

TEMP * t 函数结束后,t虽然被销毁,但它的值被返回了

就像int a,其实a也销毁,但它的值还是被传递了
shn521 2012-04-26
  • 打赏
  • 举报
回复
指针销毁了,不代表指针指向的内存被销毁
向立天 2012-04-26
  • 打赏
  • 举报
回复
释放只是说这块内存可以被别人使用
但是在没有人使用它并且往里写新的数据之前它的数据是不变的
shn521 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
那在函数中局部变量所申请到得内存在什么时候才被销毁呢?
如果是在程序结束才销毁。那么现在有一个程序,需要不停的调用这个函数,并且此程序联系工作好几个月不关闭。
这样的话不就会造成内存不够用?
[/Quote]
delete []指针;就是销毁指针所指的内存。。。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧