c ++ scandir正在填补我的记忆力

时间:2016-02-14 18:18:26

标签: c++ file ram scandir

我使用的是我在班上实现的功能:

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中它会搜索下一个第一个存储文件并且不会收集那么多内存。

任何暗示我在这里缺少的东西? 非常感谢你。

2 个答案:

答案 0 :(得分:0)

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放在了错误的地方并忘记了另一个。

每{{}}},您需要在循环中free(namelist[i-1]) ...并在结尾处执行free(namelist)

答案 1 :(得分:0)

你应该做这样的事情;

 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;