realloc函 realloc函式用法

2021-10-19 04:01:02 字數 647 閱讀 5738

realloc 用過很多次了。無非就是將已經存在的一塊記憶體擴大。

char* p = malloc(1024);

char* q = realloc(p,2048);

現在的問題是我們應該如何處理指標 p。 剛開始按照我最直觀的理解,如果就是直接將 p = null;。 到最後只需要釋放 q的空間就可以了。

因為最近在做個封裝。結果在做單元測試的時候發現。有時候我在 free(q); 的時候會出錯。這樣我就鬱悶了。

後來仔細一跟蹤,發現 realloc 完以後 q 和 p 的指標位址是一樣。不過有時候又不一樣。

仔細查了下資料。得到如下資訊:

1.如果 當前連續記憶體塊足夠 realloc 的話,只是將p所指向的空間擴大,並返回p的指標位址。 這個時候 q 和 p 指向的位址是一樣的。

2.如果 當前連續記憶體塊不夠長度,再找乙個足夠長的地方,分配一塊新的記憶體,q,並將 p指向的內容 copy到 q,返回 q。並將p所指向的記憶體空間刪除。

這樣也就是說 realloc 有時候會產生乙個新的記憶體位址 有的時候不會。所以在分配完成後。我們需要判斷下 p 是否等於 q。並做相應的處理。

這裡有點要注意的是要避免 p = realloc(p,2048); 這種寫法。有可能會造成 realloc 分配失敗後,p原先所指向的記憶體位址丟失。

realloc函 realloc函式使用規則

realloc函式使用規則如下 1 realloc失敗的時候,返回null 2 realloc失敗的時候,原來的記憶體不改變,不會釋放也不會移動 3 假如原來的記憶體後面還有足夠多剩餘記憶體的話,realloc的記憶體 原來的記憶體 剩餘記憶體,realloc還是返回原來記憶體的位址 假如原來的記憶...

realloc函式詳解

原型 extern void realloc void mem address,unsigned int newsize 用法 include 有些編譯器需要 include 功能 改變mem address所指記憶體區域的大小為newsize長度。說明 如果重新分配成功則返回指向被分配記憶體的指標...

malloc calloc和realloc的區別

malloc calloc和realloc三者都是記憶體分配操作相關的函式,要使用他們,就需要包含stdlib.h的標頭檔案。下面對他們的介面和含義進行說明。函式 void malloc size t size 含義 函式在堆上分配size大小 以位元組為單位 的空間,基本上同calloc函式但是它...