gpt4 book ai didi

c - 分配给缓冲区时 fgets 泄漏

转载 作者:太空狗 更新时间:2023-10-29 15:17:06 24 4
gpt4 key购买 nike

我无法理解为什么以下代码在一种情况下会泄漏,而在另一种情况下不会。区别在于

while(NULL!=fgets(buffer,length,file))//doesnt leak
while(NULL!=(buffer=fgets(buffer,length,file))//leaks

我以为会是一样的。

完整代码如下。

#include <stdio.h>
#include <stdlib.h>

#define LENS 10000

void no_leak(const char* argv){
char *buffer = (char *) malloc(LENS);
FILE *fp=fopen(argv,"r");

while(NULL!=fgets(buffer,LENS,fp)){
fprintf(stderr,"%s",buffer);

}
fclose(fp);
fprintf(stderr,"%s\n",buffer);
free(buffer);


}
void with_leak(const char* argv){
char *buffer = (char *) malloc(LENS);
FILE *fp=fopen(argv,"r");

while(NULL!=(buffer=fgets(buffer,LENS,fp))){
fprintf(stderr,"%s",buffer);

}
fclose(fp);
fprintf(stderr,"%s\n",buffer);
free(buffer);


}

最佳答案

因为您正在重新分配过去指向的缓冲区。当您到达代码末尾的 free(buffer); 时,buffer 将指向 NULL(因为这就是您测试的目的while 循环),因此当你调用 free 时,你不是在你 malloc 的原始指针上调用它,你什么都没有调用它。

关于c - 分配给缓冲区时 fgets 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2825251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com