c++ - 执行被信号 11 终止(可以通过违反内存限制触发)

标签 c++ memory limit

<分区>

此代码应将两个字符串作为输入。这些字符串只有字母字符(a-z 和 A-Z),但它给了我“执行被信号 11 杀死(可能因违反内存限制而触发)”。但我不明白为什么因为我使用两个数组 car 和 carQ 通过执行 car[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;
}

最佳答案

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

这没有意义。因为 S 是空的,所以 S[i] 不可能存在。

关于c++ - 执行被信号 11 终止(可以通过违反内存限制触发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23743148/

相关文章:

c++ - 处理位置信息 bison c++ 解析器错误

c++ - 我可以只使用固定数组而不是内存池吗?

java - 使用 sun.misc.Unsafe? 强制释放直接 ByteBuffer 已分配的 native 内存的示例

c - 如何检查c代码中的内存泄漏?

jquery - 在其父级中保留一个可拖动的 div

c++ - 远程 gdb 在每个事件中停止

c++ - 我需要为初始化的指针分配内存吗?

c++ - Eigen:我应该使用对齐 map 进行密集计算吗?

sorting - pymongo sort() limit() 不同吗?

C++ 套接字卡住发送数据