作者magica (似我非我)
站内Programming
标题[问题] C/C++程式区块中变数宣告与消灭
时间Sun Apr 25 10:50:25 2010
在C/C++中所有的程式区块(就是{}括弧)中的变数在离开区块时会消灭
for ex.
#include <iostream>
using namespace std;
int main()
{
{
int i=0;
cout << i;
}
// cout << i;
{
int i=1;
cout << i;
}
return 0;
}
上面的程式是合法的 执行结果是显示出01
但是如果将//的注解拿掉 编译会出现错误
我的问题是, 如果我在{}中使用pointer..
for ex
#include <iostream>
using namespace std;
int main()
{
{
int *i=new int(0);
cout << *i;
}
{
int *i=new int(1);
cout << *i;
}
return 0;
}
上面的程式依然是合法的, 执行的结果也还是01
但是两个*i的记忆体有被释放吗?
如果没有的话, 要怎麽存取?
我明白在function中的new并不会被释放
不过在function中再使用{}就让我有一点怀疑...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 70.120.191.246
1F:→ mantour:i被消灭之後就无法存取了 61.57.65.246 04/25 11:00
2F:→ mantour:但是new出来的记忆体并没有被释放 61.57.65.246 04/25 11:01
3F:→ mantour:这样应该就叫做memory leak吧 61.57.65.246 04/25 11:01
4F:推 yauhh:inaccessible object 61.231.65.85 04/25 11:38
5F:→ hilorrk:不用怀疑 同样是scope的问题 114.42.119.108 04/25 12:31
6F:推 longrider:执行到return 0, 发生两次memory leak 140.115.34.47 04/26 02:25
7F:→ longrider:我的理解对吗? 140.115.34.47 04/26 02:25
8F:推 jtmh:如果想在之後存取 *i 的话,可以另用一个指标 59.113.98.97 04/26 06:11
9F:→ jtmh:先把它们的位址存下来,这个指标必须宣告在那 59.113.98.97 04/26 06:12
10F:→ jtmh:两组 function 内的 {} 之前。 59.113.98.97 04/26 06:13
11F:推 DBoyX:garbage collection XD 118.171.247.54 04/26 12:21