動(dòng)態(tài)分配內(nèi)存
編程時(shí)吆豹,如果預(yù)先知道數(shù)組的大小,那么定義數(shù)組時(shí)就比較容易占遥。例如俯抖,一個(gè)存儲(chǔ)人名的數(shù)組,它最多容納 100 個(gè)字符瓦胎,所以可以定義數(shù)組芬萍,如下所示:
char name[100];
但是,如果預(yù)先不知道需要存儲(chǔ)的文本長(zhǎng)度搔啊,例如向存儲(chǔ)有關(guān)一個(gè)主題的詳細(xì)描述柬祠。在這里,我們需要定義一個(gè)指針负芋,該指針指向未定義所學(xué)內(nèi)存大小的字符漫蛔,后續(xù)再根據(jù)需求來分配內(nèi)存,如下所示:
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
Name = Zara Ali
Description: Zara ali a DPS student in class 10th
上面的程序也可以使用?calloc()?來編寫莽龟,只需要把 malloc 替換為 calloc 即可蠕嫁,如下所示:
calloc(200, sizeof(char));
當(dāng)動(dòng)態(tài)分配內(nèi)存時(shí),有完全控制權(quán)毯盈,可以傳遞任何大小的值剃毒。而那些預(yù)先定義了大小的數(shù)組,一旦定義則無法改變大小搂赋。
重新調(diào)整內(nèi)存的大小和釋放內(nèi)存
當(dāng)程序退出時(shí)赘阀,操作系統(tǒng)會(huì)自動(dòng)釋放所有分配給程序的內(nèi)存,但是厂镇,建議在不需要內(nèi)存時(shí)纤壁,都應(yīng)該調(diào)用函數(shù)?free()?來釋放內(nèi)存。
或者捺信,可以通過調(diào)用函數(shù)?realloc()?來增加或減少已分配的內(nèi)存塊的大小酌媒。讓我們使用 realloc() 和 free() 函數(shù),再次查看上面的實(shí)例:
當(dāng)上面的代碼被編譯和執(zhí)行時(shí)迄靠,它會(huì)產(chǎn)生下列結(jié)果:
Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th
可以嘗試一下不重新分配額外的內(nèi)存秒咨,strcat() 函數(shù)會(huì)生成一個(gè)錯(cuò)誤,因?yàn)榇鎯?chǔ) description 時(shí)可用的內(nèi)存不足掌挚。