我正在構建一個小型的C++程序,需要使用一個雙端機來管理一些動態數據。我構建了腳本,並且在少量數據放入和移出雙端隊列時工作良好,但是當存儲大量數據時,程序錯誤會導致內存錯誤。下面是相關代碼:C++程序中的內存錯誤看起來是由deque造成的
string curLine;
deque<string> lineBuffer(context);
int linesAfterContext = 0;
ifstream newFile;
istream *in;
if (input == NULL) {
in = &cin;
}
else {
newFile.open(input);
in = &newFile;
if (newFile.fail() || !newFile.is_open()) {
string error = "Not able to open that file. Please provide a valid file.";
throw error;
}
}
while(in->good()) {
getline(*in, curLine);
if (doesLineMatch(curLine)) {
if (linesAfterContext == 0) {
for (int i = 0; i < lineBuffer.size(); i++) {
string curLineInBuffer = lineBuffer.at(i);
if (!curLineInBuffer.empty()) {
cout << lineBuffer.at(i) << endl;
}
}
}
cout << curLine << endl;
linesAfterContext = context;
}
else {
if (linesAfterContext > 0) {
cout << curLine << endl;
linesAfterContext--;
}
if (lineBuffer.size() == context) {
lineBuffer.pop_front();
}
lineBuffer.push_back(curLine);
}
}
if (input != NULL) {
newFile.close();
}
清楚的問題是我如何推動和坡平的雙端隊列,因爲當我註釋掉那些四行內存故障不會再發生。任何想法爲什麼這些線會泄漏內存?
編輯:
好的,所以我只是發佈了完整的代碼。我在原始代碼中編輯了一些變量,而沒有考慮它們對內存管理的影響。我是一個C + +(或C任何真正證明= P)的新手,所以我敢肯定這是我的代碼不是deque的問題。對此感到抱歉。
你確實需要顯示你已經明確從示例中刪除的代碼。什麼「改變curline」呢? 「做什麼」執行什麼動作?既然'curLine'是一個指針,我保證你正在做一些有趣的事情,而這與使用'deque'無關。 – paddy
專家設計的'std :: deque'沒有內存泄漏。停止指責工具,並開始考慮你可能有錯。內存泄漏在_your_代碼中。現在,發佈一個測試用例。 :) –
你有''''deque 012BFB(上下文);''但是你推''lineBuffer.push_back(curLine);''curline是字符串* – Krypton