2013-05-02 3 views
0

다른 논의를 살펴본 결과 여전히 파악할 수 없습니다. 내가 구조체를 가지고,C에서 특정 구조체 유형에 대해 free를 올바르게 사용하는 방법

typedef struct { char * word; int count; } wordType; 

내 코드에서, 나는 각 배열 [색인]. 워드 malloc 구조체의 배열을 realloc. 어떻게 그들을 제대로 풀어 놓을까요? 명확성을 위해 코드에서 일부 발췌 문장을 포함 시켰습니다.

  wordType *arrayOfWords = NULL; 
      char temp[50]; 

      arrayOfWords = realloc(arrayOfWords, (unique_words+1)*sizeof(wordType)); 
      arrayOfWords[unique_words].count = 1; 
      arrayOfWords[unique_words].word = malloc(sizeof(char)*(strlen(temp)+1)); 
      strcpy(arrayOfWords[unique_words].word, temp); 

답변

2

각 할당 된 메모리를 비워야합니다. i. 이자형. arrayOfWords 배열 자체도 그 구조체의 모든의 word 필드 :

for (int i = 0; i < NUM_WORDS; /* whatever it is */ i++) { 
    free(arrayOfWords[i].word); 
} 

free(arrayOfWords); 

일부 좋은 조언 :하지 realloc() 각각의 모든 단계를 수행 - 그것은 지루한입니다. 기하 급수적으로 증가하는 스토리지를 사용하십시오 (초과하면 공간을 두 배로 늘리십시오).
{
무료 (arrayOfWords [카운터]를 .words)

2

같은 일을하지만 그 반대입니다. 여기 예를 들어

, 당신이 :

을 해제하려면

  1. 각 개별 문자열 공간을 할당 배열을위한 공간을 할당에게, 당신은 반대로 그것을 :

    1. 각 문자열의 여유 공간
    2. 배열의 여유 공간
0

코드 용 (; 카운터 < 횟수 카운터 ++ INT 카운터 = 0)


}

무료 (arrayOfWords);