2011-01-15 3 views
2

Существует аналогичный вопрос here.Свободная память структуры с двумя полями данных

I имеют следующую структуру:

struct SimpleXY 
{ 
    double x; 
    double y; 

}; 

struct SimpleEdge 
{ 
    SimpleXY first; 
    SimpleXY second; 
} 

    struct SimpleEdgeList 
    { 
      uint num_edges; 
      SimpleEdge *SimpleEdges; 
    }; 

Что такое правильный способ освободить захват памяти, SimpleEdgeList? Это мой текущий подход, но я задаюсь вопросом, нужно ли мне вручную освобождать поле данных first и second или нет.

void Free(SimpleEdgeList *myList) 
{ 

    free(myList->SimpleEdges); 
} 

Это структура C, и я ищу C-образную память.

+0

Является ли это реализацией связанного списка? Если это так, вы должны делать 'struct SimpleEdgeList {int num_xy; SimpleEdgeList * next; }; ', а функция' Free() 'будет немного больше задействована. –

+2

Наличие 'struct' с членом с тем же именем очень сбивает с толку. Пожалуйста, не делай этого. –

+0

@ Chris, это * не * список ссылок. Моя структура правильная. Но я редактирую имя участника для уточнения – Graviton

ответ

5

Вам не нужно вручную освобождать поля. Когда вы освободите память, на которую ссылается myList->SimpleEdgeList, вызов free() очистит весь блок памяти, включая два указанных вами поля. Поскольку эти поля не содержат указателей на любые другие объекты, вам не нужно спускаться в них для восстановления памяти.

4

Ваш текущий подход в порядке.

Простым правилом является следующее: ровно один free() необходим для каждого malloc(). Поскольку у вас есть только один malloc(), вам нужно всего лишь free().