为什么会发生内存泄漏?

时间:2014-07-10 19:07:55

标签: c pointers

我已将内存泄漏隔离到这些行:

char* word_ptr;
while(read_word(fp, word)) {
    word_ptr = strdup(to_lower_case(word));
    // other stuff happens, loop closes properly, etc.

因为我不喜欢malloc word_ptr,所以我不需要释放它。如果你需要小写函数,它就在这里:

char* to_lower_case(char *string) {
    for (int i = 0; i < strlen(string); i++) {
        string[i] = tolower(string[i]);
    }

    return string;
}

2 个答案:

答案 0 :(得分:5)

  

因为我不是malloc word_ptr ...

但是strdup()使用malloc()分配内存,所以它们都是一样的。

来自man 3 strdup

  

使用malloc(3)获取新字符串的内存,可以使用free(3)释放。

答案 1 :(得分:0)

strdup为您执行malloc - 请参阅http://linux.die.net/man/3/strdup