看板 Programming 關於我們 聯絡資訊
在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
mantour:i被消滅之後就無法存取了 61.57.65.246 04/25 11:00
mantour:但是new出來的記憶體並沒有被釋放 61.57.65.246 04/25 11:01
mantour:這樣應該就叫做memory leak吧 61.57.65.246 04/25 11:01
yauhh:inaccessible object 61.231.65.85 04/25 11:38
hilorrk:不用懷疑 同樣是scope的問題 114.42.119.108 04/25 12:31
longrider:執行到return 0, 發生兩次memory leak 140.115.34.47 04/26 02:25
longrider:我的理解對嗎? 140.115.34.47 04/26 02:25
jtmh:如果想在之後存取 *i 的話,可以另用一個指標 59.113.98.97 04/26 06:11
jtmh:先把它們的位址存下來,這個指標必須宣告在那 59.113.98.97 04/26 06:12
jtmh:兩組 function 內的 {} 之前。 59.113.98.97 04/26 06:13
DBoyX:garbage collection XD 118.171.247.54 04/26 12:21