Ошибка сегментации при передаче больших чисел как значений в векторе - PullRequest
1 голос
/ 27 мая 2019

Получение ошибки сегментации (Core Dumped) при передаче больших целых чисел.Он отлично работает для небольших входных данных.

Заменил int на long int, а также попытался объявить переменные глобально, но все равно та же ошибка.Эта функция используется для выполнения ряда правильных круговых вращений и возврата значения элемента по заданному индексу.Вот функция:

    vector<long long int> circularArrayRotation(vector<long long int> a, long long int k, vector<long long int> queries) {
        vector <long long int> b;
        std::vector<long long int> result(queries.size());

        b=a;
        for(long long int j=0;j<k;j++)
        {
            for(long long int i=0;i<a.size();i++)
                a[i]=b[(a.size()+i-1)%a.size()];
            b=a;
        }

        for(long long int k=0;k<queries.size();k++)
            result[k]=a[queries[k]];
        for(long long int i=0;i<result.size();i++)
                cout<<result[i]<<endl;

        return result;

    }

Остальной код можно найти здесь ссылка

Ответы [ 3 ]

0 голосов
/ 27 мая 2019

Качество реализации в стороне (нет необходимости делать какую-либо копию для поворота вектора, это можно сделать на месте), скорее всего ошибка, вызывающая ошибку segfault, в коде, который не показан.

Для дальнейшей отладки могут быть полезны следующие ссылки:

Если вам нужна дополнительная помощь, опубликуйте весь код.

== РЕДАКТИРОВАТЬ ==

Ваш код не вызывает segfault, но выдает ошибку «Прервано из-за тайм-аута» на HackerRank. Другими словами, ваше решение слишком медленное.

Это потому, что нет необходимости вращать что-либо, чтобы решить Вращение круговой матрицы :

vector<int> circularArrayRotation(vector<int> a, int k, vector<int> queries) {
    vector<int> res;
    res.reserve(queries.size());
    int offset = k % a.size() - a.size();
    for (int i : queries) {
        res.push_back(a[(i - offset) % a.size()]);
    }
    return res;
}

т.е. просто примите во внимание поворот при выборе запрошенного элемента.

0 голосов
/ 27 мая 2019

Проблема может быть в запросах [k]> a.size () в строке result[k]=a[queries[k]]; Поскольку мы не знаем фактических данных, действительно трудно определить причину.

0 голосов
/ 27 мая 2019

A vector поддерживается массивом непрерывной памяти, и ваша машина не может выделить такой большой массив.

Вы можете использовать listвместо этого, но, возможно, потребуется переписать код, чтобы использовать итераторы, если вы заботитесь о производительности.

...