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

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

free和malloc如何在C中工作?

free和malloc如何在C中工作?

C
胡子哥哥 2019-08-12 10:38:54
free和malloc如何在C中工作?我試圖找出如果我試圖從中間“釋放”指針會發(fā)生什么,請看下面的代碼:char *ptr = (char*)malloc(10*sizeof(char));for (char i=0 ; i<10 ; ++i){     ptr[i] = i+10;}++ptr;++ptr;++ptr;++ptr;free(ptr);我收到一個崩潰,出現(xiàn)未處理的異常錯誤消息。我想了解為什么以及如何免費(fèi)工作,這樣我不僅知道如何使用它,而且還能夠理解奇怪的錯誤和異常并更好地調(diào)試我的代碼?非常感謝
查看完整描述

3 回答

?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個贊

你可能知道你應(yīng)該準(zhǔn)確地傳回你收到的指針。

因?yàn)閒ree()最初并不知道塊的大小,所以它需要輔助信息才能從其地址中識別原始塊,然后將其返回到空閑列表。它還將嘗試將小的釋放塊與鄰居合并,以產(chǎn)生更有價值的大型空閑塊。

最終,分配器必須具有關(guān)于塊的元數(shù)據(jù),至少它需要在某處存儲長度。

我將描述三種方法。

  • 一個顯而易見的地方是在返回的指針之前存儲它。它可以分配比請求大幾個字節(jié)的塊,將大小存儲在第一個單詞中,然后返回指向第二個單詞的指針。

  • 另一種方法是使用地址作為關(guān)鍵字來保持至少描述已分配塊長度的單獨(dú)映射。

  • 實(shí)現(xiàn)可以從地址中獲取一些信息,從地圖中獲取一些信息。4.3BSD內(nèi)核分配器(我認(rèn)為,稱為“McKusick-Karel分配器”)為小于頁面大小的對象進(jìn)行二次冪分配,并且僅保持每頁大小,從而使得給定頁面的所有分配單一尺寸。

有些類型的第二種,可能是任何類型的第三種類型的分配器都可以實(shí)際檢測到你已經(jīng)提升了指針和DTRT,盡管我懷疑是否有任何實(shí)現(xiàn)會燒掉運(yùn)行時這樣做。


查看完整回答
反對 回復(fù) 2019-08-12
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個贊

大多數(shù)(如果不是全部)實(shí)現(xiàn)將查找數(shù)據(jù)量,以便在您操作的實(shí)際指針之前釋放幾個字節(jié)。做一個狂野free會導(dǎo)致內(nèi)存映射損壞。

如果你的例子,當(dāng)你分配10個字節(jié)的內(nèi)存時,系統(tǒng)實(shí)際保留,比方說,14。前4個包含你請求的數(shù)據(jù)量(10)然后返回值malloc是指向第一個字節(jié)的指針未分配的數(shù)據(jù)在14中分配。

當(dāng)你調(diào)用free這個指針時,系統(tǒng)會向后查找4個字節(jié),知道它最初分配了14個字節(jié),因此它知道要釋放多少。此系統(tǒng)會阻止您將要釋放的數(shù)據(jù)量作為額外參數(shù)釋放給free自身。

當(dāng)然,其他實(shí)現(xiàn)mallocfree可以選擇其他方式來實(shí)現(xiàn)這一點(diǎn)。但是它們通常不支持與free指定malloc函數(shù)返回的指針不同的指針。


查看完整回答
反對 回復(fù) 2019-08-12
  • 3 回答
  • 0 關(guān)注
  • 459 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號