【问题标题】:Segmentation fault when passing big integers as values in vector将大整数作为向量中的值传递时出现分段错误
【发布时间】:2019-05-27 07:25:48
【问题描述】:

传递大整数时出现分段错误(核心转储)。它适用于较小的输入。

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;

    }

剩下的代码可以在这里找到link

【问题讨论】:

标签: c++ c++11 vector stl


【解决方案1】:

除了实现的质量(不需要复制任何副本来旋转矢量,它可以就地完成),很可能导致段错误的错误在未显示的代码中。

要进一步调试,可以使用以下链接:

如果您需要进一步的帮助,请发布您的整个代码。

== 编辑 ==

您的代码没有触发段错误,而是在 HackerRank 上触发了“因超时而终止”错误。换句话说,您的解决方案太慢了。

那是因为不需要旋转任何东西来解决Circular Array Rotation

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;
}

即选择请求的元素时只需考虑旋转。

【讨论】:

  • 只有这个函数是我写的,其他的都是预先写好的。可以在这里找到link
  • 您应该在问题中发布该链接。请参阅我的更新答案。
  • 它在我的机器上显示分段错误错误。无论如何感谢您指出错误
【解决方案2】:

vector 由连续内存数组支持,您的机器无法分配如此大的数组。

您可以考虑改用list,但如果您关心性能,可能需要重写代码以使用迭代器。

【讨论】:

    【解决方案3】:

    问题可能是query[k] > a.size() at line result[k]=a[queries[k]]; 由于我们不知道实际输入,因此很难确定原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2016-12-20
      • 1970-01-01
      • 2014-12-10
      相关资源
      最近更新 更多