當前位置:首頁 » 文件傳輸 » 可以訪問已經釋放的內存嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

可以訪問已經釋放的內存嗎

發布時間: 2022-06-25 05:06:14

『壹』 c語言中再次釋放已經釋放的空間會造成什麼後果

free再次釋放已釋放的空間,不會有任何釋放效果,因為free釋放地址,是對地址作標記,表示該地址未被使用,可以再次用於分配。並不是說內存就消失了。

(注意:1,free後原內存中的數據,不變或被重置。2,free後不會自動將指針置NULL,需要手動置NULL,繼續用指針訪問已釋放的地址是不安全的。)

下面演示代碼(正常不要這么寫!!!)

#include <stdio.h>

#include <malloc.h>

int main()

{

int *p=NULL;

p=(int *)malloc(sizeof(int));

*p=123;

printf("p初值:%d ",*p);

free(p);

printf("第一次釋放後! ");

printf("p=%d ",*p);

printf("指針未置NULL的情況下,再次給指針指向地址賦值123後: ");

*p=123;

printf("p再次賦值%d ",*p);

free(p);

printf("再次釋放後 ");

printf("p=%d ",*p);

return 0;

}

『貳』 在一個線程內用malloc分配內存,那麼在同一個進程中啟動的另外一個線程能訪問該內存嘛求大俠解救

能訪問,不過不同線程間訪問同一內存地址時,可能會造成沖突
如果都是讀操作的話沒問題
如果一邊讀,一邊寫,或者兩邊都在寫,那就可能造成錯誤,這時候就要進行鎖操作

『叄』 c語言中,molloc的空間用free釋放後仍然可以通過指針訪問那段空間,系統究竟啥時候真正回收那段內存

內存都是用地址編好了每一」格「的,一個地址對應一「格」,定義一個指針時,系統為指針隨機賦一個內存大小范圍內的地址,所以該指針肯定指向內存的某一「格」。如果沒對指針進行賦值便使用(如p->next之類的),一般情況下在windows中運行時會提示非法訪問內存,然後程序崩潰(調試時經常出現的情況),如果其他操作系統沒有這樣保護的話,可以使得指針任意訪問內存,這是非常危險的,所以盡量別出現野指針。
1、因為定義的指針已指向一個地址,所以可以*p=5;
2、定義指針時並不是開辟內存空間,指定指針類型主要是為了在 *p 訪問指針指向內容時可以確定怎樣讀取這塊連續的內存(例如int與long所佔的位元組是不同的)

『肆』 為什麼訪問free函數釋放的內存,會引起災難性的後果

關於用malloc分配的內存,在調用free釋放後,該內存的狀態,有以下幾點說明:
1.調用free釋放掉所分配的內存後,表明該內存可以被別人使用,也就是說,其他地方調用malloc後,可以分配到該內存
2.關於free釋放該內存後,該內存中的數據,我們只能認為是臟數據;也就是說,這部分數據可能存在並且維持原來的值,也可能被清空,或者被修改為其他值;
由此可見,有很多中可能情況,所以,在釋放了該內存後,除了要對當時分配的指針賦值為NULL,還要注意不要再去引用這部分內存,不要嘗試獲取這部分的值,這些已經非法。

『伍』 釋放了該對象的內存,但是為什麼指針還能訪問該對象

對象或數組被釋放所佔空間內容系統會去清空因沒必要之程序其代碼需要分配內存時候塊內存能會被系統重新利用重新分配被新對象、變數或數組佔用並會被重新初始化 因此當釋放塊內存(包括對象、變數、數組等)沒有被重新分配掉(數據沒被破壞)還通過指針訪問安全無法確定系統時候會分配掉系統內存分配機制復雜我們也沒必要去關心

『陸』 關於野指針問題。內存被釋放,為什麼不能使用這塊內存。

free函數實現通知系統回收相關資源,即讓當前分配的內存可以重新被其他應用所使用。
如果你還想使用這塊內存就不要去釋放它!(好比是,你借了別人的車,用完後,還給了人家,還給人家後,你還要開人家的車,能行嗎?)
引用別人的描述:
3、free()到底釋放了什麼

這個問題比較簡單,其實我是想和第二大部分的題目相呼應而已!哈哈!free()釋放的是指針指向的內存!注意!釋放的是內存,不是指針!這點非常非常重要!指針是一個變數,只有程序結束時才被銷毀。釋放了內存空間後,原來指向這塊空間的指針還是存在!只不過現在指針指向的內容的垃圾,是未定義的,所以說是垃圾。因此,前面我已經說過了,釋放內存後把指針指向NULL,防止指針在後面不小心又被解引用了。非常重要啊這一點!
參考:
http://forum.byr.e.cn/pc/pccon.php?id=315&nid=68136

『柒』 htc 手機內存如何訪問,釋放空間啊

手機必須取得ROOT許可權,然後可以安裝R.E文件管理器,就可以訪問手機內存了

『捌』 c++中被釋放的對象生命周期還有多久就是對象已經通過析構函數釋放,但是還可以訪問這個對象,持續

如果對象或數組被釋放,所佔空間中的內容系統不會去清空,因為沒必要,之後程序中的其他代碼在需要分配內存的時候,這塊內存很可能會被系統重新利用重新分配,被新的對象、變數或數組佔用,並會被重新初始化。

因此當你釋放一塊內存後(包括對象、變數、數組等),沒有被重新分配掉(數據沒被破壞),還是可以通過指針訪問,但是這是不安全的,你無法確定系統什麼時候會分配掉,系統的內存分配機制很復雜,我們也沒必要去關心它。

『玖』 VPS內存滿了需要重啟么訪問還可以訪問的

不一定非要重啟才可以解決. 可以在VPS的任務管理器中把一些無用的程序停止掉.釋放一些內存.也可以通過一些軟體來整理系統內存.優化大師自帶的內存整理工具就不錯.可以把一些不用的內存釋放出來.另外一些沒用的程序盡量不要安裝.有一些用戶習慣在VPS上安裝IIS.MYSQL.SQL等各種程序.其實沒必要全部安裝.只裝用的上的即可.尤其SQL是很占內存的. 如果條件允許的話建議你升級到更高配置吧.否則內存占滿會影響到速度
我是從事IDC行業的.以上回答希望對你有所幫助.有不懂的可以來問我

『拾』 object-c 內存釋放是什麼意思dealloc後對象還能訪問

其實在對象的保留計數值(retainCount)為1時,做釋放操作,iOS就不會再對該對象所在的堆內存空間做更改了,只是在告訴系統,這塊內存現在可被重新分配(也就是回收到空閑塊區).當然你還有這段內存的地址,訪問它此時已經是不安全的了,因為它隨時可能被分配.