作者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