stl作为局部变量的内存问题

C/C code



Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





void func()

{

  map<int,int>m;

  for(int i=0;i<0xffffff;i  )

    m.insert(make_pair(i,i));

}




以上函数中,m是局部变量,
但是func函数返回时并没有释放内存
我猜测是因为make_pair的内存是在堆上分配的
请问怎样写才能在退出函数时自动释放内存?

网友回复:根据???
网友回复:我观察windows资源治理器发现跳出函数的时候内存没有减少
同样的代码,把map换成vector就没有这个问题
网友回复:跟踪下不就知道了
网友回复:make_pair的内存是在堆上分配的


显然不对,是存在栈里面的,退出函数作用域自动释放


网友回复:那我上面说的问题是怎么回事呢,
用资源治理器看,单步执行状态下,确实函数返回时内存不减少,而用vector就会恢复到调用前的内存
调试手段我还不太熟
我用的stlport,vs2005下面
网友回复:似乎会自动释放吧!
网友回复:没有吧,在我的机器上很明显,而且根本不用0xffffff,四个f就够明显了。
网友回复:你单步跟踪的时间,跟到函数的闭括号时,对于调试器来说,那个“位置”是局部变量析构之前的执行点。你应该

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值