返回指针时内存泄漏

时间:2013-05-19 14:11:57

标签: c memory-management memory-leaks valgrind

我在以下功能中遇到内存泄漏情况。

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);后来。忘了提那个部分。我相信这与我创建指针并返回它的事实有关。也许引用被调用函数函数中的另一个指针捕获。

2 个答案:

答案 0 :(得分:1)

使用malloc分配的内存永远不会再次释放。 如果您从通话网站执行此操作:

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

它应该解决泄漏。

答案 1 :(得分:0)

您在这里使用malloc。

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

使用后需要释放内存。

完成root_buf并且不再需要它之后:

free (root_buf);