一道使用了数组,list,stack的题目超出内存解决方法

一道使用了数组,list,stack的题目超出内存
#include <iostream>
#include <list>
#include <stack>
using namespace std;

int main(){
int numoftrain, i, temp, num_test;
    //列车进出的序列string
    list<int>outtrain;
    stack<int>imitate;

    cin >> num_test;
    while(num_test--){
  int counter = 0;
      string instr, outstr;
      bool flag[20];//用于记录出入顺序

  cin >> numoftrain;//输入列车数目
      cin >> instr;
      cin >> outstr;

      for (i = 0;i < numoftrain; i++){
         outtrain.push_back(outstr[i]);
      }

      for (i = 0;i < numoftrain; i++){
          imitate.push(instr[i]);
          flag[counter] = false;//push就是IN
          counter++;
          while((!outtrain.empty())&&(!imitate.empty())&&(outtrain.front() == imitate.top() )){
         outtrain.pop_front();
         imitate.pop();
         flag[counter] = true;//每次pop就是OUT
         counter++;
          }
      }
      if (imitate.empty()){
      cout << "Yes." << endl;
      for(i = 0; i < counter; i++){
      if(flag[i])
     cout << "out" << endl;
      else
     cout << "in" << endl;
      }
      cout << "FINISH" << endl;
      }
      else
      cout << "No." << endl << "FINISH" << endl;

      while((!outtrain.empty())||(!imitate.empty())){
            outtrain.pop_front();
            imitate.pop();
      }
    }
//system("pause");
return 0;
}

怎么会超出内存,每次都清空了,求解!
------解决方案--------------------
第一,介绍下你代码的意图;
第二,排版;
第三,是否有尝试跟踪代码或者想办法narrow scope;

话说大家都看了一天“糟糕”的代码了(工作),实在没有兴趣。