c ++ scandir 正在填满我的记忆
c++ scandir is filling my memory up
我使用了我在 class 中实现的功能:
bool MyClass::getNextFile(string& s_first_file, const char* c_path_data){
//string s_first_file = "";
struct dirent **namelist;
string s_file_actual = "";
int n;
int i=0;
n = scandir(c_path_data, &namelist, dataFilter, alphasort);
if (n < 0){
//perror("scandir");
return false;
}else{
while (i<n) {
s_file_actual = namelist[i++]->d_name;
if(i==1){
cout << "get file " << s_file_actual << "..." << endl;
s_first_file = s_file_actual;
}
}
free(namelist[i-1]);
return true;
}
}
在我的 C++ 程序中,我使用以下内容:
...
MyClass myc;
...
int main(){
while(myc.getNextFile(s_first_file, c_path_data)){
s_first_file << endl;
}
return 1;
}
只要再次调用该函数,我的 ram 内存就会越来越满。
如果我直接把代码放在main里,它会搜索下一个第一个出现的文件,不会收集那么多内存。
有什么提示我在这里遗漏了什么吗?
非常感谢。
while (i<n) {
s_file_actual = namelist[i++]->d_name;
if (i==1) {
cout << "get file " << s_file_actual << "..." << endl;
s_first_file = s_file_actual;
}
}
free(namelist[i-1]);
return true;
哎呀!
我不确定这是怎么发生的,但是你把你的 free
放错了地方而忘记了另一个。
根据 the manpage,您需要 free(namelist[i-1])
在循环内 … 并在最后执行 free(namelist)
。
你应该这样做;
while (i<n)
{
s_file_actual = namelist[i++]->d_name;
if (i==1)
{
cout << "get file " << s_file_actual << "..." << endl;
s_first_file = s_file_actual;
}
free(namelist[i-1]);
}
free(namelist);
return true;
我使用了我在 class 中实现的功能:
bool MyClass::getNextFile(string& s_first_file, const char* c_path_data){
//string s_first_file = "";
struct dirent **namelist;
string s_file_actual = "";
int n;
int i=0;
n = scandir(c_path_data, &namelist, dataFilter, alphasort);
if (n < 0){
//perror("scandir");
return false;
}else{
while (i<n) {
s_file_actual = namelist[i++]->d_name;
if(i==1){
cout << "get file " << s_file_actual << "..." << endl;
s_first_file = s_file_actual;
}
}
free(namelist[i-1]);
return true;
}
}
在我的 C++ 程序中,我使用以下内容:
...
MyClass myc;
...
int main(){
while(myc.getNextFile(s_first_file, c_path_data)){
s_first_file << endl;
}
return 1;
}
只要再次调用该函数,我的 ram 内存就会越来越满。
如果我直接把代码放在main里,它会搜索下一个第一个出现的文件,不会收集那么多内存。
有什么提示我在这里遗漏了什么吗? 非常感谢。
while (i<n) {
s_file_actual = namelist[i++]->d_name;
if (i==1) {
cout << "get file " << s_file_actual << "..." << endl;
s_first_file = s_file_actual;
}
}
free(namelist[i-1]);
return true;
哎呀!
我不确定这是怎么发生的,但是你把你的 free
放错了地方而忘记了另一个。
根据 the manpage,您需要 free(namelist[i-1])
在循环内 … 并在最后执行 free(namelist)
。
你应该这样做;
while (i<n)
{
s_file_actual = namelist[i++]->d_name;
if (i==1)
{
cout << "get file " << s_file_actual << "..." << endl;
s_first_file = s_file_actual;
}
free(namelist[i-1]);
}
free(namelist);
return true;