練習動態記憶體開闢

2021-09-19 15:39:46 字數 1394 閱讀 1993

malloc

void* malloc (size_t size);

這個函式向記憶體申請一塊連續可用的空間,並返回指向這塊空間的指標。

1.如果開闢成功,則返回乙個指向開闢好空間的指標。

2.如果開闢失敗,則返回乙個null指標,因此malloc的返回值一定要做檢查。

3.返回值的型別是 void* ,所以malloc函式並不知道開闢空間的型別,具體在使用的時候使用者自己來決定。

4.如果引數 size 為0,malloc的行為是標準是未定義的,取決於編譯器。

#include #include int main()  

} for (int i = 0; i < 10; ++i)

free(p);

p = null;

system("pause");

return 0;

}}

callor

void* calloc (size_t num, size_t size);

函式的功能是為 num 個大小為 size 的元素開闢一塊空間,並且把空間的每個位元組初始化為0。

#include #include int main()  

} for (int i = 0; i < 10; ++i)

free(p);

p = null;

system("pause");

return 0;

}

realloc

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

如果將分配的記憶體減少,realloc僅僅是改變索引的資訊。

如果是將分配的記憶體擴大,則有以下情況:

1)如果當前記憶體段後面有需要的記憶體空間,則直接擴充套件這段記憶體空間,realloc()將返回原指標。

2)如果當前記憶體段後面的空閒位元組不夠,那麼就使用堆中的第乙個能夠滿足這一要求的記憶體塊,將目前的資料複製到新的位置,並將原來的資料塊釋放掉,返回新的記憶體塊位置。

3)如果申請失敗,將返回null,此時,原來的指標仍然有效。

注意:如果呼叫成功,不管當前記憶體段後面的空閒空間是否滿足要求,都會釋放掉原來的指標,重新返回乙個指標,雖然返回的指標有可能和原來的指標一樣,即不能再次釋放掉原來的指標。

free

搭配malloc calloc realloc使用

void free (void* ptr);

free函式用來釋放動態開闢的記憶體。 如果引數 ptr 指向的空間不是動態開闢的,那free函式的行為是未定義的。

如果引數 ptr 是null指標,則函式什麼事都不做。

動態記憶體開闢

記憶體分配有三種方式 1.從靜態儲存區分配,生命週期隨程式的結束而結束,比如全域性變數,static變數 2.從棧空間分配,函式呼叫完其被自動釋放 3.從堆空間分配,即動態記憶體開闢,比如 malloc,calloc,realloc,何時申請何時釋放 malloc 函式原型void malloc s...

動態記憶體開闢

記憶體分配有三種方式 1.從靜態儲存區分配,生命週期隨程式的結束而結束,比如說全域性變數,static變數 2.從棧空間分配,函式呼叫完成後被自動釋放 3.從對空間分配,即動態記憶體開闢,比如malloc,calloc,realloc malloc calloc realloc和free mallo...

動態記憶體開闢

1.記憶體分配方式 三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的 整個執行期間都存在。例如全域性變數,static 變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的...