我正在构建一个小型C ++程序,需要使用deque来管理一些动态数据。我建立了脚本并且当有少量数据放入和取出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的问题。对此感到抱歉。
答案 0 :(得分:1)
从您的pastebin链接
请查看你的parseInt()函数。你要返回一个局部变量的地址,这是一个禁忌。
int * parseInt(char *contextArg) {
int resultingNumber = 0;
//...
int *endResult;
endResult = &resultingNumber;
return endResult;
}
见这里:
Returning local data from functions in C and C++ via pointer
我建议你更熟悉指针,以及指针使用的不做和不做。