コードは、組み込みLinuxでまだ処理されていないファイルを見つけて処理する必要があります。getDirは、ディレクトリのソートされた内容を返すために使用されます。以下のコードは、数十または100を超えるファイルを処理した後は完全に機能しますが、その後oom-killerで停止します。これは、C ++ベクトル(ループベクトル内のループベクトル)を使用するための悪い方法ですか?この方法は、oom-killerを引き起こしている可能性がありますか?爆破せずに機能する可能性のある別のアプローチはありますか?スコープ外になると、各ベクトルを破棄するべきではありませんか?代わりに新規/削除を使用する必要がありますか?また、メモリリークを検出するためのvalgrindは、このプロセッサ(TI DM368)のSDKに統合されていませんが、コードは非常に短く、新しいステートメントはありません。ノート:実際のコードは、SQLデータベースで既に処理されたファイルをチェックしますが、このコードは、SQLコードがコメント化された状態で、依然としてoom-killerを引き起こしているため、簡単にするために省略されています。ファイルパスの形式は/YYYYmmdd/HH/MMSS.SS.extです。
void getDir (string dir, vector<string> &files) {
...
while ((dirp = readdir(dp)) != NULL) {
files.push_back(string(dirp->d_name));
closedir(dp);
sort(files.begin(), files.end());
while (true) {
vector<string> days;
getDir(database_location, days);
for (uint d=0; d<days.size(); d++) {
vector<string> hours;
getDir(database_location+days[d], hours);
for (uint h=0; h<hours.size(); h++) {
vector<string> files;
string dir = database_location+days[d]+"/"+hours[h];
getDir(dir, files);
for (uint f=0; f<files.size(); f++) process(dir, files[f]);