[완료][C언어] fputs를 반복해서 이용하니 메모리에 문제가 생기네요.

kwanseob의 이미지

숫자를 하나씩 증가시켜서 파일에 기록하는 아주 간단한 코드입니다.
하지만 코드를 돌리니 메모리가 기하급수적으로 증가하는 문제가 발생하지만, 왜그런지를 모르겠습니다.
기록하는 파일의 크기가 너무 커져서 그러는 걸까요?

코드는 아래와 같습니다.

#include
#include
#include
#include

int main() {
FILE *file;

if( (file=fopen("filePointerResult", "w")) == 0) {
printf("ERROR: file openning!!\n");
exit(1);
}

mpz_t a;
mpz_init_set_str(a, "0", 10);

while(1) {
fputs(mpz_get_str(NULL, 10, a), file);
mpz_add_ui(a, a, 1);
}

return 0;
}

wariua의 이미지

당연히... 파일에 뭔가를 계속 기록한다고 프로그램의 메모리 사용량이 계속해서 늘어나지는 않습니다.

mpz_get_str() 함수가 동적으로 할당한 문자열을 반환하는데 그걸 해제해 주지 않고 있기 때문에 메모리 사용량이 계속 늘어나는 것입니다. 자세한 내용은 mpz_get_str() 매뉴얼을 봐주시면 되겠구요...

일반적으로, 문자열을 반환하는 함수를 쓸 때는 그 함수가 반환 문자열을 위한 메모리 공간을 어떻게 확보하는지 꼭꼭 확인해 주시면 좋습니다.

$PWD `date`

kwanseob의 이미지

덕분에 문제를 해결할 수 있었습니다.