C ++程序中的内存故障似乎是由deque引起的

时间:2014-02-12 02:25:56

标签: c++ memory-leaks deque

我正在构建一个小型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的问题。对此感到抱歉。

1 个答案:

答案 0 :(得分:1)

从您的pastebin链接

http://pastebin.com/Jp1RgwqV

请查看你的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

我建议你更熟悉指针,以及指针使用的不做和不做。