Свободная память структуры с двумя полями данных - PullRequest
2 голосов
/ 15 января 2011

Есть похожий вопрос здесь .

У меня есть следующая структура:

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);
}

Это структура Си, и я ищу освобождение памяти, подобное Си.

Ответы [ 2 ]

5 голосов
/ 15 января 2011

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

4 голосов
/ 15 января 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...