freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c畢業(yè)設(shè)計(jì)外文翻譯--修正內(nèi)存問(wèn)題-資料下載頁(yè)

2025-05-12 19:19本頁(yè)面

【導(dǎo)讀】overwritten,management.

  

【正文】 我們卻分配了多次 。 如果內(nèi)存泄漏經(jīng)常發(fā)生或者十分巨大,最后你電腦的主要內(nèi)存將被耗盡。程序首先會(huì)變慢,然后電腦開(kāi)始使用分頁(yè)技術(shù)虛擬內(nèi)存,然后以內(nèi)存溢出錯(cuò)誤宣告失敗。用普遍的調(diào)試器發(fā)現(xiàn)內(nèi)存溢出錯(cuò)誤是困難的因?yàn)樗鼪](méi)有一個(gè)明顯的錯(cuò)誤聲明。 BUG 會(huì)丟失或不能被聲明。 錯(cuò)誤的內(nèi)存管 理用法 一 套 完整 BUG 集合 與錯(cuò)誤聲明 對(duì)于內(nèi)存管理來(lái)說(shuō) :解除一個(gè)錯(cuò)誤的內(nèi)存超過(guò)一次,在解除以后訪問(wèn)內(nèi)存,或解除一個(gè)從分配過(guò)的阻塞內(nèi)存。用 delete 代替delete[]在 C++數(shù)組中也屬于這個(gè)類,也可以用 malloc()和 delete 一起使用,用 new 和 free()一起使用。 緩存溢出 緩存溢出 內(nèi)存被重載時(shí)超出范圍的 BUG,或損壞。緩存溢出會(huì)由屬性引起,在堆中的局部變量,通過(guò)內(nèi)存管理分配在棧上的動(dòng)態(tài)變量。 在內(nèi)存中令人討厭的事是內(nèi)存重載的時(shí)候 BUG 沒(méi)有被聲明。只有在以后,另一個(gè)在問(wèn)題中的聲明將存取 在內(nèi)存中。因?yàn)閮?nèi)存含有一個(gè)不合法的變量,內(nèi)存會(huì)在一下幾個(gè)方面表現(xiàn)出異常:這個(gè)問(wèn)題得出一個(gè)錯(cuò)誤的結(jié)果,或者如果一個(gè)不合法的值在指針上,這個(gè)問(wèn)題將試圖存取和保護(hù)內(nèi)存。如果在存取的過(guò)程中一個(gè)動(dòng)態(tài)指針可變,程序?qū)⑻幚硭凑粘绦虼a。鍵指針不是引起內(nèi)存溢出和嚴(yán)重問(wèn)題的關(guān)鍵。 非原始內(nèi)存 BUG 讀 非原始內(nèi)存是因?yàn)?C 或 C++允許創(chuàng)建變量在沒(méi)有一個(gè)原始值的情況下。程序員有完全的責(zé)任給所有的屬性和局部變量賦值,也可以通過(guò)聲明,或各種 C++的構(gòu)造器。內(nèi)存引導(dǎo)功能 malloc()和操作 new 也不能夠定義變量或者是內(nèi)存 為空。未定義的變量中包含不穩(wěn)定的值。 內(nèi)存調(diào)試解決 上述問(wèn)題 處理 BUG 需要?jiǎng)?chuàng)建一個(gè)強(qiáng)大的 BUG 處理工具。尋找 BUG與漏洞有關(guān),不完善的, 只有普通 BUG 調(diào)試器 GDB 內(nèi)存變得不安全 。應(yīng)付大型軟件工程中的系統(tǒng)漏洞,很多程序員都提出了相同的意見(jiàn)。他們建立內(nèi)存管理機(jī)制為一個(gè)被分配阻塞內(nèi)存利用不同的機(jī)制,并且確保是否每個(gè)阻塞內(nèi)存在最后都得到了分配。 自從每個(gè)人在各自的 C 或 C++程序中遇到相同的內(nèi)存 BUG,自從每個(gè)人用傳統(tǒng)的內(nèi)存處理器追蹤到很少的幾個(gè) BUG,一系列叫內(nèi)存調(diào)試器的工具誕生了。最總所周知的是 Purify,在 1991 年被 Pure 軟件公司發(fā)布。 Purify 一直被用于一些同類的內(nèi)存調(diào)試器。也有 Insure++, Valgrind,也有 BoundsChecker,除此之外的一些其他同類工具。 內(nèi)存調(diào)試器作用于所有被動(dòng)態(tài)分配的內(nèi)存。他們同樣攔截和檢查分配過(guò)的內(nèi)存。一些內(nèi)存調(diào)試器能夠檢查一些被分配在棧上的局部變量和被分配過(guò)的內(nèi)存。Purify 和 BoundsChecker 用代碼編譯工具完成這些工作在程序連接期間,Insure++利用源代碼編譯工具, Valgrind 則把程序先執(zhí)行在虛擬機(jī)上并且監(jiān)聽(tīng)所有的內(nèi)存處理。源代碼編譯工具允許一個(gè) BUG 發(fā)生的時(shí)候精確的找到代碼發(fā)生的位置。 一下的 BUG 被內(nèi)存調(diào)試器處理: 1. 內(nèi)存泄漏 2. 訪問(wèn)已經(jīng)被釋放的內(nèi)存 3. 釋放一段內(nèi)存空間不止一次 4. 釋放從未被分配過(guò)的內(nèi)存 5. 把 C 中的 malloc(), free()與 C++中的 new/delette 混雜在一起 6. 在數(shù)組中用 delete 代替 delete[] 7. 數(shù)組越界錯(cuò)誤 8. 訪問(wèn)從未被分配過(guò)的內(nèi)存 9. 未被定義 過(guò)的內(nèi)存讀取 我們將在下一章節(jié)演示如何為你的程序附屬內(nèi)存調(diào)試器,內(nèi)存調(diào)試器如何發(fā)現(xiàn)和報(bào)告錯(cuò)誤。 例 1 檢測(cè)內(nèi)存訪問(wèn)錯(cuò)誤 我們 第一個(gè)例子是在動(dòng)態(tài)內(nèi)存中分配一列,存取最后一個(gè)在數(shù)組序列外的元素,讀一個(gè) 未 定義 的數(shù)組元素,最終忘記分配這個(gè)數(shù)組。我們用公共范圍工具Valgrind在 Linux上作為內(nèi)存調(diào)試器,演示內(nèi)存調(diào)試器如何自動(dòng)的解決這些 BUG。 檢查一個(gè)無(wú)用的寫操作 第一個(gè)最大最嚴(yán)重的錯(cuò)誤是緩存溢出:對(duì)這個(gè)數(shù)組以外的寫操作。因?yàn)檫@個(gè)數(shù)組只有 100 個(gè)元素,最大的有效索引是 99。 100 指針超過(guò)了這個(gè)數(shù)組的有效范圍。一次報(bào)告一個(gè)無(wú)用的寫錯(cuò)誤。 ==11323== Invalid write of size 4 ==11323== at 0x8048518: main (:9) ==11323== Address 0x1BB261B8 is 0 bytes after a block ==11323== of size 400 alloc’d ==11323== at 0x1B903F40: malloc ==11323== (in /usr/lib/valgrind/) ==11323== by 0x80484F2: main (:6) 這個(gè)字符串 , 應(yīng)用一個(gè)過(guò)程 ID, 當(dāng) Valgrind 檢查過(guò)程的時(shí)候 是十分必要的 。 最重要的信息塊是在第 9 行的寫操作。這依然有信息補(bǔ)充說(shuō)明根據(jù)以離內(nèi)存最近的區(qū)域和它是怎么被分配的。內(nèi)存調(diào)試器猜測(cè)第 9行與內(nèi)存阻塞有關(guān)。這個(gè)猜測(cè)被修正因?yàn)閮蓚€(gè)都屬于數(shù)組 A。 在 Valgrind 中內(nèi)存中數(shù)組下標(biāo)越界錯(cuò)誤只有當(dāng)動(dòng)態(tài)內(nèi)存被定義為 malloc()或new 的情況下。這個(gè)是第 6 行的實(shí)例 : 6 int*A = (int * )malloc (sizeof(int) * size) 如果例子中書寫 A[size]在第 6 行, A 將被定義在一個(gè)局部變量上,堆而不是棧上。它表現(xiàn)出 Valgrind 不能夠發(fā)現(xiàn)這樣的錯(cuò)誤但是 Purity 可以捕獲到它們。它說(shuō)明不是所有的內(nèi)存調(diào)試器都能捕獲到同一個(gè)錯(cuò)誤。
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1