执行死亡信号11(可能因违反内存限制而触发)

时间:2014-05-19 16:52:15

标签: c++ memory limit

此代码应采用两个字符串作为输入。这些字符串只有字母字符(a-z& A-Z),但它给了我“用信号11杀死执行(可以通过违反内存限制来触发)”。但我不明白为什么因为我使用两个数组汽车和carQ来存储有关字母字符charachters的信息,通过做汽车[char-'A']并且这个索引总是大于或等于零且小于60。你有什么想法吗?

#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#include <string>
#include <utility>
#include <stdio.h>
#include <queue>
#include <fstream>
#include <functional>
#include <cstdlib>
#include <map>
#include <set>
#include <bitset>

#define MAX_N 20000005

using namespace std;

typedef pair<int, int> ii ;
typedef vector< ii >   vii ;
typedef vector<int> vi ;

int n,m,s,car[60],carQ[60];
string W,S;
queue<char> q;

int main() {
    ifstream in; ofstream out;
    in.open("input.txt"); out.open("output.txt");

    in>>n>>m;

    for(int i=0;i<n;i++){
        in>>S[i];
        car[(int)(S[i]-'A')]++;
    }
    for(int i=0;i<m;i++)
        in>>W[i];

    for(int i=0;i<m;i++){
        if(!car[(int)(W[i]-'A')])
            while(!q.empty()){
                carQ[q.front()-'A']--;
                q.pop();
            }
        else{
            q.push(W[i]);
            carQ[(int)(W[i]-'A')]++;
            while(carQ[(int)(W[i]-'A')]>car[(int)(W[i]-'A')]){
                carQ[q.front()-'A']--;
                q.pop();
            }
            if(q.size()==n)
                s++;
        }
    }

    out<<s;       

    in.close(); out.close(); 
    return 0;
}

1 个答案:

答案 0 :(得分:2)

for(int i=0;i<n;i++){
    in>>S[i];

这没有意义。由于S为空,S[i]可能无法存在。