Realloc開的玩笑(孫磊 金龍)

2021-08-29 11:42:54 字數 469 閱讀 3773

先來看一段**:

#include void main()

然而事情並不簡單如此,函式viod* realloc(*, int)的執行分如下幾個步驟:

1. 根據第乙個指標型別引數,分析並取到這個指標所指空間的大小。

2. 根據第二個引數,查詢空閒記憶體中合適大小的空間,分配出來。

3. 找到後,將第乙個指標引數所指空間的內容如數複製到新分配的空間。

4. 銷毀第乙個指標引數原先指向的空間,並將其更新指向到新分配的空間。

非常值得注意的是,如果在第乙個指標引數指向後有足夠大的空間,那麼realloc將不會移動原先分配的空間,這個時候使用q不會造成問題,但是如果空間吃緊,realloc將可能把整個p的指向挪到別的地方

去,那樣,上面那段**在free(q)的地方也會出現錯誤。

雖然通常情況下,上面的**看起來萬事大吉,但是卻埋下了不安全的隱患。

「Bohra」 你開什麼玩笑?!

1966年,bohra和jacopini提出了以下3種基本結構,用這3種基本結構作為表示乙個良好演算法的基本單元。1 順序結構 2 選擇結構 3 迴圈結構 譚浩強 c程式設計 第四版 p26 然而這段文字卻是錯誤的,其廣泛傳播和氾濫完美地詮釋了什麼叫 以訛傳訛 首先,這段文字中的 bohra 實乃 ...

「Bohra」 你開什麼玩笑?!

1966年,bohra和jacopini提出了以下3種基本結構,用這3種基本結構作為表示乙個良好演算法的基本單元。1 順序結構 2 選擇結構 3 迴圈結構 譚浩強 c程式設計 第四版 p26 然而這段文字卻是錯誤的,其廣泛傳播和氾濫完美地詮釋了什麼叫 以訛傳訛 首先,這段文字中的 bohra 實乃 ...

有趣的 realloc 函式

在 c 語言中,我們最熟悉的函式排行榜上,malloc 和 free 想必名列前茅,而 realloc 則可能就要靠後了。不過你知道嗎,有了 realloc 函式,你甚至可以不使用 malloc 或者 free,而是由它一力承擔。該函式的原型如下 void realloc void ptr,size...