2013-05-19 73 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); 

可有人点我。

编辑

我做调用free(root_buf);后来。忘了提及那部分。我相信这与我创建一个指针并返回它的事实有关。也许参考被捕获到调用函数中的另一个指针。

+0

你永远不会叫'免费'。这就是为什么你有泄漏。 – CodeTower

+0

看来你也有一个filedescriptor泄漏。 (或者是一个全局变量?) – wildplasser

+0

@wildplasser fd只是帮助我将多个文件描述符存储在一个向量中。它是一个整数变量。 – AdityaTS

回答

1

的内存分配。 如果你这样做,从您的通话网站:

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

应该解决的泄漏。

0

您在此处使用malloc。

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

您需要在使用后释放内存。

你与root_buf完成,不再需要后它:使用malloc永远不会再次释放

free (root_buf);