遇到的一条段错误问题,发生在cin向含有string成员的结构体对象数组的某一个元素写入时

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>

using namespace std;

const int LIM = 30;
int bitree[LIM];

void update(int pos) {
    for (; pos < LIM; pos += pos & (-pos))
        bitree[pos]++;
}

int query(int pos) {
    int ret = 0;
    for (; pos > 0; pos -= pos & (-pos))
        ret += bitree[pos];
    return ret;
}

struct Node {
    string str;
    int cnt;
    bool operator < (const Node &n) const {
        return cnt < n.cnt;
    }
};
Node dat[60];

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int n, m;
    while (cin >> n >> m) {
        memset(dat, 0, sizeof dat);
        for (int i = 0; i < m; i++) {
            // 此处读取时段错误
            cin >> dat[i].str;
            memset(bitree, 0, sizeof bitree);
            for (int j = n - 1; j >= 0; j--) {
                dat[i].cnt += query(dat[i].str[j] - 'A' + 1);
                update(dat[i].str[j] - 'A' + 1);
            }
        }
        sort(dat, dat + n);
        for (int i = 0; i < n; i++)
            cout << dat[i].str << '\n';
    }
    return 0;
}

问题链接:https://vjudge.net/problem/POJ-1007