다음 사례에서 코드 누수가 발생하는 이유를 이해하는 데 문제가 있습니다. 차이점은버퍼에 할당 할 때 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);
}
이것을보고 주위를 둘러 보는 방법에 대해 궁금한 사람은 임시 포인터를 사용하여'fgets()'의 반환 값을 보관하십시오. – MortalMan