<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學(xué)習(xí)啦>學(xué)習(xí)英語>專業(yè)英語>計算機(jī)英語>

        c語言中realloc函數(shù)的用法

        時間: 長思709 分享

          c語言中realloc函數(shù)的用法的用法你知道嗎?下面小編就跟你們詳細(xì)介紹下c語言中realloc函數(shù)的用法的用法,希望對你們有用。

          c語言中realloc函數(shù)的用法的用法如下:

          在C語言中,良好的編程習(xí)慣要求一個函數(shù)只做一件事,如果一個函數(shù)實(shí)現(xiàn)了若干功能,可以說基本是一個糟糕的設(shè)計。

          C語言 realloc() 函數(shù)位于 stdlib.h 頭文件中,其原型為:

          void *realloc(void *ptr, size_t size);

          realloc() 會將 ptr 所指向的內(nèi)存塊的大小修改為 size,并將新的內(nèi)存指針返回。

          設(shè)之前內(nèi)存塊的大小為 n,如果 size < n,那么截取的內(nèi)容不會發(fā)生變化,如果 size > n,那么新分配的內(nèi)存不會被初始化。

          如果 ptr = NULL,那么相當(dāng)于調(diào)用 malloc(size);如果 size = 0,那么相當(dāng)于調(diào)用 free(ptr)。

          如果 ptr 不為 NULL,那么他肯定是由之前的內(nèi)存分配函數(shù)返回的,例如 malloc()、calloc()或realloc()。

          如果 ptr 所指的內(nèi)存塊被移動,那么會調(diào)用 free(ptr)。

          看吧,一個簡單的 realloc() 卻賦予了好幾個功能,這并不是良好的函數(shù)設(shè)計。估計也是為了兼容性,才容忍這個函數(shù)一直在C庫中。雖然在編碼中,realloc() 會提供一定的方便,但是也很容易引發(fā)Bug。

          下面就舉兩個例子,來說明一下。

          1) realloc() 第一種行為引發(fā)的Bug

          01.void *ptr = realloc(ptr, new_size);

          02.if (!ptr) {

          03. // 錯誤處理

          04.}

          這里就引出了一個內(nèi)存泄露的問題,當(dāng)realloc() 分配失敗的時候,會返回NULL。但是參數(shù)中的 ptr 的內(nèi)存是沒有被釋放的。如果直接將realloc()的返回值賦給ptr。那么當(dāng)申請內(nèi)存失敗時,就會造成ptr原來指向的內(nèi)存丟失,造成內(nèi)存游離和泄露。

          正確的處理應(yīng)該是這樣:

          01.void *new_ptr = realloc(ptr, new_size);

          02.if (!new_ptr) {

          03. // 錯誤處理。

          04.}

          05.ptr = new_ptr

          2) 第三種行為引發(fā)的Bug

          實(shí)際上,malloc(0)是合法的語句,會返還一個合法的指針,且該指針可以通過free去釋放。這就造成了很多人對realloc()的錯誤理解,認(rèn)為當(dāng)size為0時,實(shí)際上realloc()也會返回一個合法的指針,后面依然需要使用free去釋放該內(nèi)存。

          01.void *new_ptr = realloc(old_ptr, new_size);

          02.//其它代碼

          03.free(new_ptr);

          由于錯誤的認(rèn)識,不去檢驗new_size是否為0,還是按照new_size不為0的邏輯處理,最后并free(new_ptr)。這里就引入了double free的問題,造成程序崩潰。

          所以,realloc() 這個設(shè)計并不怎么優(yōu)良的函數(shù)陷阱還是不少的,一不小心就踩雷了,上面只是兩個簡單的小例子,大家在實(shí)際使用的時候還應(yīng)該注意一些其他小問題。

        c語言中realloc函數(shù)的用法

        c語言中realloc函數(shù)的用法的用法你知道嗎?下面小編就跟你們詳細(xì)介紹下c語言中realloc函數(shù)的用法的用法,希望對你們有用。 c語言中realloc函數(shù)的用法的用法如下: 在C語言中,良好的編程習(xí)慣要求一個函數(shù)只做一件事,如果一個函數(shù)實(shí)現(xiàn)了
        推薦度:
        點(diǎn)擊下載文檔文檔為doc格式
        533336 主站蜘蛛池模板: 国产办公室秘书无码精品99| 2022一本久道久久综合狂躁| 成人自拍小视频免费观看| 中国美女a级毛片| 麻花传媒在线观看免费| 精品国产成人午夜福利| 国产 亚洲 网友自拍| 九九热视频在线观看精品| 亚洲国产精品综合久久网络| 影音先锋人妻av中文字幕久久| 日本欧美大码a在线观看| 另类 亚洲 图片 激情 欧美| 亚洲伊人五月丁香激情| 深夜av免费在线观看| 国产又猛又爽又黄视频| 亚洲欧美精品一中文字幕| 亚洲男人天堂2021| 日韩精品一区二区三区激情视频| 太深太粗太爽太猛了视频| 国产午夜精品视频免费不卡| 亚洲欧美国产日韩天堂区| 久久精品无码专区东京热| 精品视频福利| 久久婷婷大香萑太香蕉AV人| 夫妻一起自拍内射小视频| 久久精品国产清自在天天线 | 久久综合亚洲色一区二区三区| 北岛玲精品一区二区三区| 日韩精品不卡一区二区三区| 亚洲欧美日韩久久一区二区| 午夜福利在线一区二区| 国产色婷婷亚洲99精品小说| 国产熟睡乱子伦午夜视频 | 欧美成人午夜在线观看视频| 一区二区三区精品不卡| 一区二区福利在线视频| 精品国产一区二区三区四区五区| 亚洲国产片一区二区三区| 国产性色的免费视频网站| 妺妺窝人体色WWW看美女| 亚洲综合成人av在线|