C 为什么会发生内存泄漏?

C 为什么会发生内存泄漏?,c,pointers,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) { fo

我已将内存泄漏隔离到以下线路:

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;
}
char*到小写(char*string){
for(int i=0;i
因为我不知道怎么说

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

手册3标准起

新字符串的内存是通过
malloc(3)
获得的,可以通过
free(3)
释放

因为我不知道怎么说

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

手册3标准起

新字符串的内存是通过
malloc(3)
获得的,可以通过
free(3)
释放


strdup
是否为您执行
malloc
-请参见
strdup
是否为您执行
malloc
-请参见我是否必须释放(word_ptr)?@marchon:是的,与
malloc()
相同的逻辑:检查
NULL
失败时,
free()
内存。。。如果需要,您甚至可以
realloc()
返回内存。不幸的是,释放内存并不能消除错误?@marchon:您是否在
while
循环之外使用
word_ptr
?如果没有,则在每个循环迭代结束时释放
word\u ptr
;否则,它将取决于您如何使用
word\u ptr
。那么我必须释放(word\u ptr)吗?@marchon:是的,与
malloc()
的逻辑相同:检查
NULL
故障时,
释放()
内存。。。如果需要,您甚至可以
realloc()
返回内存。不幸的是,释放内存并不能消除错误?@marchon:您是否在
while
循环之外使用
word_ptr
?如果没有,则在每个循环迭代结束时释放
word\u ptr
;否则,它将取决于您如何使用
word\u ptr