c++ 01串排序 提交时出现runtime error 不知道错在哪了

#include<iostream>
#include<string>
using namespace std;
int num1(string a)
{
    int n = 0;
    for (int i = 0; i < a.length(); ++i)
        if (a[i] == '1')
            n++;
    return n;
}
int main()
{
    string s[60], a;
    int i=0;
    while (cin >> a)
    {
        s[i] = a;
        i++;
    }
    for (int j = 0; j < i-1; ++j)
        for (int k = 0; k < i -1- j; ++k) {
            if (s[k].length() > s[k+1].length())
            {
                string temp = s[k];
                s[k] = s[k+1];
                s[k+1] = temp;
            }
            else if (s[k].length() == s[k+1].length())
            {
                int n1 = num1(s[k]), n2 = num1(s[k+1]);
                if (n1 > n2)
                {
                    string temp = s[k];
                    s[k] = s[k + 1];
                    s[k + 1] = temp;
                }
                else if (n1 == n2)
                {
                    if (s[k] > s[k+1])
                    {
                        string temp = s[k];
                        s[k] = s[k + 1];
                        s[k + 1] = temp;
                    }
                }
            }
        }
    for (int p = 0; p < i; ++p)
        cout << s[p] << endl;
}

在linux上用gdb命令调试,就知道在哪里有异常了