2011-01-15 2 views
2

비슷한 질문이 here입니다.두 개의 데이터 필드가있는 구조의 사용 가능한 메모리

I의 구조는 다음과 같습니다

struct SimpleXY 
{ 
    double x; 
    double y; 

}; 

struct SimpleEdge 
{ 
    SimpleXY first; 
    SimpleXY second; 
} 

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

SimpleEdgeList에 의해 메모리 보류를 해제하는 적절한 방법은 무엇입니까? 이것은 현재 나의 접근 방식이지만 수동으로 firstsecond 데이터 필드를 해제해야하는지 아닌지 궁금합니다.

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

현재 접근 방식이 좋습니다.

간단한 규칙은 다음과 같습니다. 각 malloc()에는 정확히 하나의 free()이 필요합니다. malloc() 하나만 있으니 free() 하나만 있으면됩니다.

관련 문제