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

4

2 回答 2

1

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

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

它应该解决泄漏。

于 2013-05-19T14:16:31.683 回答
0

您在这里使用 malloc。

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

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

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

free (root_buf);
于 2013-05-19T14:14:56.880 回答