1樓:匿名使用者
所謂釋放就是你無法再去引用那個記憶體單元——雖然記憶體裡的值並沒有被刪除。
你只要記住,一旦釋放,再去引用,那就是不合法的——甚至是危險的——因為你無法知道,釋放後的地址是否已經被其他物件使用。 其實這些編譯器已經幫你做了,它不會允許你返回一個臨時變數的地址或引用。但是,編譯器遠沒有那麼聰明去監控好你所有的行為——所以,你自己必須要有意識。
2樓:
就拿區域性變數說吧,子程式執行完後,區域性變數使用的棧空間「暴露」出來了,可以被新的函式分配到並進行使用,甚至是作為**空間了。如果你的主程式(或子程式)還對之前區域性變數的地址進行讀或寫,那麼,可能是修改了**,也可能是修改了資料;可能導致程式崩潰,也可能導致資料錯誤修改,改變程式執行邏輯。
這些空間是沒法保證只讓你使用的。
3樓:匿名使用者
區域性物件釋放後,如果它原來所在的記憶體位置,沒有被別的語句所修改資料,那麼成員數值本身應該還存在。就好像你把電腦中的某個檔案刪掉了,其實只是刪掉了這個檔案在磁碟中的目錄樹資訊,檔案本身還在,還是可以用恢復軟體把檔案恢復的。
關於c++全域性變數和區域性變數的問題!!
4樓:匿名使用者
區域性變數:在一個函式內部定義的變數就是區域性變數。
作用範圍:只侷限在定義它的本函式體之內,即只有在該函式體內才能使用該變數,而在此函式之外是不能使用它們的。
由於在不同函式體內定義的變數只在它所在的函式體內部有效,所以,不同函式體中可以定義相同名字的變數,但它們代表不同的物件,互不干擾。它們在記憶體中佔用不同的記憶體單元。
函式的形參也是該函式的區域性變數,其他函式不能呼叫。
有效作用範圍:從定義該變數的位置開始到本程式檔案的結束。
***在同一個檔案中,若全域性變數和區域性變數同名,則在區域性變數的作用範圍內,全域性變數不起作用。
見下圖:
5樓:倒黴熊
因為main函式中有 定義這個區域性變數n,所以 main中使用的n是區域性變數的n,而不是全域性變數的n。
有關c++中區域性變數的問題
6樓:
在for(,,),在for(...)內定義的變數其作用域只在for迴圈體內有效,不同一編繹,有不同的規定。visual c++ 6.0是這樣規定的!
7樓:倒黴熊
這應該和編譯器有關。
標準中說的和你認為的差不多。
但是在vc6環境下,編譯可能就會出現重複定義的錯誤。
這與編譯器支援標準的程度有關。
8樓:
i是區域性變數,把它放在main中開頭定義,作用相同,它會在當前模組結束後才會被系統自動撤銷。
9樓:0半人半神
不知道是不是編譯器問題,我這裡是可以執行的。函式裡的i只有for裡面語句作用域所以一定要用兩個int。
結果是6asdfgh
asdfgh
asdfgh
10樓:匿名使用者
去掉你第二個i前面的int就可以編譯了。
11樓:匿名使用者
編譯器原因。。你這個應該是vc vs之類的吧。。你換gcc的ide就可以了 比如devc++ codeblocks
關於c++區域性變數與全域性變數的問題
12樓:匿名使用者
在 "同一個程式" 中一個區域性變數能不能被 "其他程式" 引用和修改
引號中內容貌似衝突,是同一個,還是不同個
如果「其它程式」指的是其它函式的話,區域性變數不能被引用,區域性變數的生命期僅限其所在函式的被呼叫,函式呼叫結束,區域性變數所佔記憶體隨即被釋放掉。函式還未被呼叫,不會分配記憶體給區域性變數,這時它不存在。
13樓:匿名使用者
你的意思是區域性變數能不能被其他函式引用和修改吧?不能
14樓:匿名使用者
不能。區域性變數都是有作用域的,出了作用域的引用都是非法包括函式裡面定義的static變數,也只能在作用域內有效(雖然它的用法類似全域性變數)。
15樓:匿名使用者
要理解這個最簡單的方法就是弄明白變數的生存週期。只給你說這些了,其他的自己查資料就好了。
16樓:匿名使用者
如果是靜態區域性變數就可以。
關於C 中的問題,一個關於C 中「 」的問題
按照你的思路這樣改就可以了,原來 1的下標是會越界的,編譯都無法通過,因為 放在後就直接越界了,但是先 就不會了,還有陣列的下標要改成10,要不然就不對應了。對於你的補充問題不是賦值不成功,其實已經成功賦值了,只是如果你把 放在ix vec後面的話是原來ix vec為0,但只執行賦值語句了以後ix ...
關於c的問題,關於c 的一個問題
以下給出的是在main裡面的方法,已經通過了測試,然後名稱空間用預設的就可以了 using system using system.collections.generic string s console.readline dictionarymap new dictionary foreach c...
c問題關於汽車加油,C 問題 關於汽車加油
configuration 汽車加油 win32 debug linking.libcd.lib crt0.obj error lnk2001 unresolved external symbol main debug 汽車加油.exe fatal error lnk1120 1 unresolve...