2017-02-06 105 views
0

我有這樣的結構:如何釋放裏面的malloc失敗的realloc

typedef struct person_st{ 
    char *first_name, *last_name; 
    int id; 
    Date birthday; 
}*pPerson, Person; 

可以說,我重新分配sizeof(Person)*(++n)幾次。 裏面的每個結構我也爲first_namelast_name分配空間。

假設在某些時候會有分配失敗,而我使用realloc,處理所有first_namelast_name分配的最安全/最聰明的方法是什麼?在Person結構的realloctaion失敗後,它仍然有辦法將它們釋放出來?

謝謝。

回答

2

失敗的情況下realloc將不會干擾原始數據,所以你仍然可以參考舊的數據(總是假設你一直因爲失敗的情況下realloc將返回null老指針)

5

調用realloc的最好方式是這樣的:

more_people = realloc(people, count * sizeof(Person)); 
if (!more_people) { 
    // handle failure 
} else { 
    people = more_people; 
} 

這樣你檢查從realloc的返回代碼和安全地處理故障