動態通訊錄(對上次通訊錄進行優化)
阿新 • • 發佈:2022-04-09
這次主要是針對上次通訊錄功能的一些優化
比如:之前的通訊錄一開始就開闢了存放1000個聯絡人的空間,而實際上我們並不需要那麼多的空間,因此,我們可以使用動態記憶體分配,初始化時,只可以存放三個聯絡人的資訊
void InitContact( Contact* ps) { ps->data = (PeoInfo*)malloc(DEFAULT_SZ * sizeof(PeoInfo)); if (ps->data == NULL) { return; } ps->size = 0; ps->capacity = DEFAULT_SZ; }
對每次返回的地址一定要進行判斷,看是否是空指標,避免錯誤
當存放的聯絡人超過三個時,這時我們可以使用realloc進行擴容,每次開闢兩個空間
void check_Capacity(Contact* ps) { //使用realloc進行動態開闢空間的擴容 if (ps->size == ps->capacity) { //滿了開始擴容 PeoInfo* ptr=realloc(ps->data, (ps->capacity+ 2) * sizeof(PeoInfo)); if (ptr != NULL) { ps->data = ptr; ps->capacity += 2; printf("增容成功\n"); } } }
其他相關程式碼與之前程式碼無差別,只是一定要注意,當動態記憶體分配好並使用完畢後,一定要記得釋放
void DestoryContact(Contact* ps) { free(ps->data); ps->data = NULL; }