9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦>學習英語>專業英語>計算機英語>

c語言中realloc函數的用法

時間: 長思709 分享

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

  c語言中realloc函數的用法的用法如下:

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

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

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

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

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

  如果 ptr = NULL,那么相當于調用 malloc(size);如果 size = 0,那么相當于調用 free(ptr)。

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

  如果 ptr 所指的內存塊被移動,那么會調用 free(ptr)。

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

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

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

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

  02.if (!ptr) {

  03. // 錯誤處理

  04.}

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

  正確的處理應該是這樣:

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

  02.if (!new_ptr) {

  03. // 錯誤處理。

  04.}

  05.ptr = new_ptr

  2) 第三種行為引發的Bug

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

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

  02.//其它代碼

  03.free(new_ptr);

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

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

c語言中realloc函數的用法

c語言中realloc函數的用法的用法你知道嗎?下面小編就跟你們詳細介紹下c語言中realloc函數的用法的用法,希望對你們有用。 c語言中realloc函數的用法的用法如下: 在C語言中,良好的編程習慣要求一個函數只做一件事,如果一個函數實現了
推薦度:
點擊下載文檔文檔為doc格式
533336 主站蜘蛛池模板: 国产精品亚洲电影久久成人影院| 亚洲制服无码一区二区三区| 日本系列亚洲系列精品| 免费国产高清在线精品一区| 真实单亲乱l仑对白视频| 国产精品激情av在线播放| 美女自卫慰黄网站| 国产乱人伦AV在线麻豆A| 欧美日韩国产图片区一区| 四虎成人精品无码| 亚洲啪啪精品一区二区的| 国产99在线 | 亚洲| 国产亚洲欧美另类一区二区| 久久综合国产色美利坚| 天堂va蜜桃一区二区三区| 国产精品亚洲二区在线看| 男女啪啪18禁无遮挡激烈| 久久夜夜免费视频| 成人无码一区二区三区网站| 成人国产精品一区二区不卡| 国产999久久高清免费观看| 欧美成年性h版影视中文字幕| 久久被窝亚洲精品爽爽爽| 国产一区二区av天堂热| 国产精品入口中文字幕| 亚洲AV成人一区国产精品| 99国产欧美另类久久久精品| 在线精品国精品国产不卡| 99福利一区二区视频| 亚洲精品人成网线在线| 国产精品自在自线免费观看| 蜜桃臀av一区二区三区| 国产三级精品福利久久| 国产av普通话对白国语| 给我播放片在线观看| 国产精品九九九一区二区| 久久午夜无码免费| 综合激情丁香久久狠狠| 久久天天躁夜夜躁狠狠820175| 九九热久久这里全是精品| 在线a级毛片无码免费真人|