如何在C中正确使用free for specific struct type

时间:2013-05-02 06:04:59

标签: c malloc free dynamic-data realloc

我已经查看了其他讨论,仍然无法弄清楚这一点。我有一个结构,

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

在我的代码中,我malloc每个数组[index] .word并重新分配结构数组。我如何正确地解放它们?为清晰起见,我在代码中添加了一些代码段。

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

3 个答案:

答案 0 :(得分:2)

你会做同样的事情但反过来。

例如,在这里:

  1. 为阵列分配空间
  2. 为每个字符串分配空间
  3. 要释放它,你可以反过来:

    1. 每个字符串的可用空间
    2. 阵列的可用空间

答案 1 :(得分:2)

你必须释放每一块已分配的内存:i。即所有结构中的word字段,然后是arrayOfWords数组本身:

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

free(arrayOfWords);

一些好的建议:不要在每一步都realloc() - 这很乏味。使用指数级增长的存储空间(超出空间时增加一倍)。

答案 2 :(得分:0)

代码将是

  

for(int counter = 0; counter&lt; count; counter ++)
  {
      free(arrayOfWords [counter] .words);
  }

     

free(arrayOfWords);