1. 程式人生 > 其它 >動態通訊錄(對上次通訊錄進行優化)

動態通訊錄(對上次通訊錄進行優化)

這次主要是針對上次通訊錄功能的一些優化

比如:之前的通訊錄一開始就開闢了存放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;
}