我遇到問題,理解爲什麼在一種情況下發生下面的代碼泄漏,而在另一種情況下不會發生。 區別是分配給緩衝區時在fgets中泄漏
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);
}
對於任何人看到這個並想知道如何解決它,使用一個temp指針來保存fgets()的返回值。 – MortalMan 2016-01-24 21:55:04