2013-05-19 3 views
0

다음 함수에서 메모리 누수가 있습니다. 포인터를 반환 할 때 메모리 누수가 발생했습니다.

char * readdatafromfile(unsigned pageNumber) { 
    char *buff = (char*) malloc(sizeof(char) * pagesize); 
    lseek(fd, pagesize * (pageNumber), SEEK_SET); 
    read(fd, buff, pagesize); 

    return buff; 
} 
//Read from file 
char * readfromfile(char *fname, int pageno) { 
    char *buff = NULL; 
    fd = searchinvector(fname); 
    if (fd > 0) 
     buff = readdatafromfile(pageno); 
    else 
     printf("\nINDEX is not opened\n"); 
    return buff; 
} 

나는 메모리 누수가 발생하고 어떻게 그것을 극복하는 경우 나에게 다음과 같은 방법을 기능을

char* root_buf = readfromfile(fname,pageno); 

수있는 사람이 포인트를 호출하려합니다.

편집

내가 무료 (root_buf)를 호출 할; 후에. 그 부분을 언급하는 것을 잊었습니다. 이것은 포인터를 생성하고 리턴한다는 사실과 관련이 있다고 생각합니다. 어쩌면 참조가 호출자 함수의 다른 포인터에 걸릴 수도 있습니다.

+0

'무료'로 전화하지 마십시오. 그게 누출 된 이유야. – CodeTower

+0

당신은 또한 filedescriptor 누수가있는 것 같습니다. (또는 전역 변수는 무엇입니까?) – wildplasser

+0

@wildplasser fd는 벡터에 여러 파일 설명자를 저장하는 데 도움이됩니다. 정수 변수입니다. – AdityaTS

답변

1

메모리가 malloc 다시 해제되지 않습니다 사용하여 할당. 당신이 당신의 전화 사이트에서이 작업을 수행 할 경우 :

char* root_buf = readfromfile(fname,pageno); 
// do stuff 
free(root_buf); 

그것은 누수를 해결해야한다.

0

여기에서 malloc을 사용하고 있습니다.

char *buff = (char*) malloc(sizeof(char) * pagesize); 

사용 후 메모리를 비워야합니다. 더 이상 root_buf으로 수행하지 않고 후

가 필요합니다

free (root_buf); 
관련 문제