[問題] C/C++程式區塊中變數宣告與消滅

看板Programming作者 (似我非我)時間14年前 (2010/04/25 10:50), 編輯推噓4(407)
留言11則, 6人參與, 最新討論串1/2 (看更多)
在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

04/25 11:00, , 1F
i被消滅之後就無法存取了
04/25 11:00, 1F

04/25 11:01, , 2F
但是new出來的記憶體並沒有被釋放
04/25 11:01, 2F

04/25 11:01, , 3F
這樣應該就叫做memory leak吧
04/25 11:01, 3F

04/25 11:38, , 4F
inaccessible object
04/25 11:38, 4F

04/25 12:31, , 5F
不用懷疑 同樣是scope的問題
04/25 12:31, 5F

04/26 02:25, , 6F
執行到return 0, 發生兩次memory leak
04/26 02:25, 6F

04/26 02:25, , 7F
我的理解對嗎?
04/26 02:25, 7F

04/26 06:11, , 8F
如果想在之後存取 *i 的話,可以另用一個指標
04/26 06:11, 8F

04/26 06:12, , 9F
先把它們的位址存下來,這個指標必須宣告在那
04/26 06:12, 9F

04/26 06:13, , 10F
兩組 function 內的 {} 之前。
04/26 06:13, 10F

04/26 12:21, , 11F
garbage collection XD
04/26 12:21, 11F
文章代碼(AID): #1BqwtqQe (Programming)
文章代碼(AID): #1BqwtqQe (Programming)