C如何判斷記憶體地址可用,c 裡面怎麼樣根據記憶體地址訪問這個地址的值?

時間 2022-03-27 23:45:23

1樓:匿名使用者

大哥,指標是很忌諱這種操作的,本身這樣的用法就是有問題的。

比方說當b指向a,但是a這一塊記憶體釋放了,這個時候原本為a的記憶體就有可能是其它程式的資料了,但是b還是記得a的地址,但是裡面的東西是不能隨便訪問的,發生了非法訪問。

在這種情況下b和a就是一個東西的啦,除非你自己為b開闢一塊記憶體,不要用這樣的軟連線方式。

2樓:勤奮的芋頭

int *a=new int;//設執行後a=0x12345678int *b=a;//那麼b也=0x12345678delete a;

a=null;//於是,a=0了,b還=0x12345678現在,b正在被一個子執行緒使用。這個執行緒需要判斷b是否已經被釋放。

b是一個沒有唯一標識的臨時變數,不能給b另外設定變數表明其釋放狀態。比方說當b指向a,但是a這一塊記憶體釋放了,這個時候原本為a的記憶體就有可能是其它程式的資料了,但是b還是記得a的地址,但是裡面的東西是不能隨便訪問的,發生了非法訪問。

在這種情況下b和a就是一個東西的啦,除非你自己為b開闢一塊記憶體,不要用這樣的軟連線方式。

3樓:匿名使用者

你可以試試結構化異常檢查 seh try。可以攔截程式崩潰。。。但是這個方法治標不治本,而且消耗很多額外的系統資源。。。如果能有更好的方法知道記憶體失效,防止程式崩潰就好了

4樓:2023年自然拼讀

1.步驟類:①整體簡介②所需工具/原料③方法/步驟④注意事項2.

常識類:①直接回答問題②詳細給出具體原因/理由/介紹3.原因類:

①詳細解釋原因/理由②提供有效解決方案(構成見步驟類)4.其他型別詳見高質量標準(點選回答框右側**)

5樓:匿名使用者

不知道·不知道·不知道·不知道·

c++裡面怎麼樣根據記憶體地址訪問這個地址的值?

6樓:空雪夢見

int main()

如果我寫 int *p = i; 你不放心的話,就自己用scanf輸入吧,這樣就放心了吧

你弄兩個程式分別執行這樣執行肯定不行,一個是程序結束後該程序的所有記憶體都被系統**了,另外一個是每個不同的程序都擁有自己獨立的地址空間(虛擬地址空間),就好像(不考慮跨行取現業務的情況下)你拿著農行的卡到建行取錢建行不會給你錢,你跟建行說你卡號是什麼什麼建行會跟你說沒有這個賬號,道理是一樣的

7樓:

如果你是要這個「物件」跨程式存在,只能寫檔案存起來了,下次用的時候再載入。畢竟你不可能直接管理記憶體,更不能保證這個物件會超過程序的壽命而存在。

要不就寫一個守護程式,這個程式一直執行,它的作用就是儲存這個「物件」;然後其他要使用這個物件的程式用管道等機制與這個守護程序進行通訊。

8樓:匿名使用者

這是不行的,每個程序都有獨立的4g虛擬記憶體,當程式執行的時候 系統 通過對映在實體記憶體中自主分配相應記憶體,程式設計師操作的都是虛擬記憶體

程式耗時很多都是在分配實體記憶體上

linux下有四五種程序間通訊你可以你查來看看,uc講的主要就是記憶體分配、程序間通訊、多程序(執行緒)等問題,很重要

9樓:

感覺不太好吧,不推薦直接訪問記憶體。

如何用c++讀取ce找到的記憶體地址的值

怎麼用c++來讀取記憶體資料?

10樓:匿名使用者

這要看讀取的是本程式的記憶體資料還是其他程式的了,如果是本程式的,用指標即可;如果要試圖讀取其他程式的記憶體地址上的資料,你需要藉助win32 api來實現。

11樓:匿名使用者

本程式:指標->修改 外部程式:注入->指標->修改

c++如何用指標指向具體的記憶體地址?

c++或者c#如何讀取指定記憶體地址的值?

12樓:匿名使用者

marshal.readbyte(intptr address, int offset);

從指定的地址中讀取一個位元組的資料

address:記憶體地址

offset:地址偏移量

13樓:匿名使用者

每個程式都有自己的記憶體地址,不是你隨便指定一個就可以讀的,要在該程式合法的地址段內才可以讀。不能讀不屬於該程式的地址

14樓:匿名使用者

在windows下無法進行這個操作了.只能訪問自己的程式空間,這種操作只能dos下這種非保護模式下的作業系統

15樓:芮濟薩智宸

可以,,通過api函式就可以,,不過c#不能直接讀取記憶體值,,不過可以呼叫系統的api

16樓:劉順陰浩闊

若樓主能獲得連續記憶體的地址值,可以這樣讀取其內容:(假設有一個地址是12ff7c)

const

int*p;

p=0x12ff7c;

printf("%d",*p);

這三句可以讀取並列印12ff7c這個地址的內容。

但請注意,12ff7c必須是十六進位制地址值,p=0x12ff7c;前面的0x不能少,否則,編譯將不能識別12ff7c是地址。用vc

6.0編譯以上三行**,可能會出現警告,樓主不用理會,繼續編譯、連線、執行,最後,是可以讀出結果的。

17樓:蔚冷醜剛

c++我不清楚,c#裡面的話不能直接讀應該,反正我沒見過可以直接對記憶體操作的方法,因為理論上講,那樣做是不安全的,如果提供了這樣的方法,.net framework(託管**)就沒有存在的必要了,而且就算讀,也要經過作業系統的同意啊。所以你似乎只有一種方法,就是使用windows api

18樓:遇卉成秋寒

不論什麼程式都不能直接通過記憶體地址來讀寫其他程式的記憶體地址的,除非通過記憶體對映或者**注入,**比較多,也比較難懂,可以加qq

10009095詳細說

c++中指標中存放的是一個地址,那是不是可以理解為存放這個地址的這個記憶體空間也有一個地址?

19樓:匿名使用者

對的。目前電腦架構,記憶體是資訊儲存單元,以位元組(8位二進位制)為單位,每一個單元都有對應的地址,就像公寓編號。 地址本身也想一個32位或者64位整數(基於32位或者64位cpu結構),儲存地址資訊的單元也有自己的地址,叫做指標的指標。

比如int a = 10; // 變數 aint *ptr = &a; // ptr 儲存了 a 的地址int **pptr = &ptr; // pptr 儲存了 ptr的地址

.........

以此類推。一般用到二級指標就夠了,但是理論上這個過程可以無限類推。只不過不常用。

指標的指標(二級指標)還是比較常見的。

20樓:匿名使用者

任何一個變數的本質都一樣,都是記憶體中的一段特定的空間。

所以指標變數與非指標變數在變數這個層面上是一樣的,沒區別的,區別體現在編譯系統如何理解運用變數中儲存的值,比如:

int a,*p

這裡定義了兩個變數,a是一個int變數,p是一個指標變數,但是a和p儲存的其實都是一個數字。區別就在於 系統會 把p中儲存的數字當作一個地址去運用,從而跳轉到這個地址去操作其中的資料。

C如何判斷大括號對應的大括號,C 如何判斷一個大括號對應的大括號

村頭希望 工具 選項 環境 字型和顏色 在 顯示項 裡找 括號匹配 方括號 很簡單的.選單 工具 選項 字型和顏色 在 顯示項 這個列表中找到 括號匹配 將 項背景色 改為純紅色,確定 你再點一下 看一下,相配的是不是變成了醒目的紅色? visual studio 的ide 就有這樣的功能啊!對了支...

C類網IP地址為192 168 0 0如何劃分為子網

對於192.168.0.0 網路以及子網掩碼 255.255.255.192 網路主機數 廣播地址從到 192.168.0.0 192.168.0.1 192.168.0.62 192.168.0.63 192.168.0.64 192.168.0.65 192.168.0.126 192.168....

C如何判斷vector中某值是否存在

include vectorvec vec.push back 1 vec.push back 2 vec.push back 3 vec.push back 4 vec.push back 5 vector iterator ret ret std find vec.begin vec.end 1...