第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

訪問超出界限的數組有多危險?

訪問超出界限的數組有多危險?

C++ C
守著一只汪 2019-05-30 17:06:47
訪問超出界限的數組有多危險?訪問超出其界限的數組(在C中)有多危險?有時會發(fā)生這樣的情況:我從數組外部讀取(我現在了解了,然后訪問了程序中其他部分使用的內存,甚至超出了內存),或者我試圖為數組之外的索引設置一個值。程序有時崩潰,但有時只是運行,只會產生意想不到的結果。現在我想知道的是,這到底有多危險?如果它破壞了我的節(jié)目,也不會那么糟糕。另一方面,如果它破壞了我程序之外的東西,因為我設法訪問了一些完全無關的內存,我想這是非常糟糕的。我讀了很多“任何事情都可能發(fā)生”,“分割可能是最不壞的問題”“你的硬盤可能會變成粉紅色,獨角獸可能會在你的窗戶下唱歌”,這一切都很好,但真正的危險是什么呢?我的問題:除了我的程序之外,從數組之外讀取值會破壞任何東西嗎?我可以想象,僅僅看東西就不會改變什么,或者它會改變我碰巧到達的文件的“上次打開”屬性嗎?除了我的程序之外,在數組之外設置值可以破壞任何東西嗎?從這里堆棧溢出問題據我所知,訪問任何內存位置都是可能的,沒有安全保障。我現在XCode內部運行我的小程序。這是否為我的程序提供了額外的保護,使其無法超出自己的記憶范圍?它會傷害XCode嗎?對于如何安全地運行我固有的錯誤代碼,有什么建議嗎?我使用OSX10.7,Xcode 4.6。
查看完整描述

4 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

就ISO C標準(語言的官方定義)而言,訪問超出其界限的數組有“未定義行為“.這句話的字面意思是:

使用不可移植或錯誤的程序結構或錯誤數據的行為,而本國際標準對此沒有任何要求

一份非規(guī)范性說明對此作了進一步闡述:

可能的未定義行為包括:完全忽略具有不可預知結果的情況;在翻譯或程序執(zhí)行過程中以具有環(huán)境特征的記錄方式(有或不發(fā)布診斷消息);終止翻譯或執(zhí)行(通過發(fā)布診斷消息)。

這就是理論?,F實是什么?

在“最好”的情況下,您將訪問一些內存,這些內存要么是當前運行的程序擁有的(這可能導致程序不正常),要么是屬于當前運行的程序(這可能會導致程序崩潰,比如分段錯誤)?;蛘撸赡車L試將程序所擁有的內存寫入內存,但這是標記為只讀的;這可能還會導致程序崩潰。

這是假設您的程序運行在一個試圖保護并發(fā)運行的進程來自彼此的操作系統(tǒng)下。如果您的代碼運行在“裸金屬”上,比如如果它是OS內核或嵌入式系統(tǒng)的一部分,那么就沒有這樣的保護;您的行為不當的代碼應該提供這種保護。在這種情況下,造成損害的可能性要大得多,在某些情況下,包括對硬件(或附近的物品或人員)的物理損壞。

即使在受保護的操作系統(tǒng)環(huán)境中,保護也并不總是100%。例如,存在允許非特權程序獲得根(管理)訪問的操作系統(tǒng)錯誤。即使具有普通用戶權限,故障程序也會消耗過多的資源(CPU、內存、磁盤),可能會導致整個系統(tǒng)癱瘓。許多惡意軟件(病毒等)利用緩沖區(qū)溢出獲取對系統(tǒng)的未經授權的訪問。

(一個歷史上的例子:我聽說在一些舊系統(tǒng)中核心存儲器,重復訪問緊循環(huán)中的單個內存位置實際上會導致內存塊融化。其他可能性包括破壞CRT顯示器,以及移動磁盤驅動器的讀/寫頭與驅動器柜的諧波頻率,導致它走過一張桌子并跌倒在地板上。)

總有一天天網擔心。

底線是:如果你能寫一個程序來做一些不好的事情。故意,至少從理論上講,一個bug程序可以做同樣的事情。不慎.

實際上,這是非常在MacOSX系統(tǒng)上運行的bug程序不太可能做比崩潰更嚴重的事情。但不可能完全地防止錯誤代碼做非常糟糕的事情。


查看完整回答
反對 回復 2019-05-30
  • 4 回答
  • 0 關注
  • 793 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號