【发布时间】:2013-05-19 14:11:56
【问题描述】:
我在以下函数中面临内存泄漏情况。
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);之后。忘了说那部分。我相信这与我正在创建一个指针并返回它的事实有关。可能引用被调用函数中的另一个指针捕获。
【问题讨论】:
-
你永远不会打电话给
free。这就是为什么你有泄漏。 -
您似乎也有文件描述符泄漏。 (或者 fd 是一个全局变量?)
-
@wildplasser fd 只是帮助我将多个文件描述符存储在一个向量中。它是一个整数变量。
-
代码中有一处分配了内存。所以这是唯一可能发生泄漏的地方。 valgrind 在哪里说你有泄漏?
-
@Rasmus malloc in readdatafromfile()
标签: c memory-management memory-leaks valgrind