C++ 消除运行时错误(SIGSEGV)

C++ 消除运行时错误(SIGSEGV),c++,C++,我不认为在我的代码中我试图访问空指针,或初始化大型数组,请有人帮忙,我不知道运行时错误(SIGSEGV)是从哪里来的。问题到问题可在以下网址找到: /2008年3月18日/问题/地雷 编辑: 我想我发现了,NathanOliver是对的,v1,因为我的代码,有时候碰巧是空的。一些答案实际上是从我的循环中找到的(在n上面)。非常感谢。我解决了这个问题,最终得到了AC,但只得到了30分,我的代码运行了额外的0.01秒。谁能帮我优化它,根据问题陈述,请 #include <bits/stdc++

我不认为在我的代码中我试图访问空指针,或初始化大型数组,请有人帮忙,我不知道运行时错误(SIGSEGV)是从哪里来的。问题到问题可在以下网址找到: /2008年3月18日/问题/地雷

编辑: 我想我发现了,NathanOliver是对的,v1,因为我的代码,有时候碰巧是空的。一些答案实际上是从我的循环中找到的(在n上面)。非常感谢。我解决了这个问题,最终得到了AC,但只得到了30分,我的代码运行了额外的0.01秒。谁能帮我优化它,根据问题陈述,请

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t; cin>>t; while(t--)
    {
        int n = 0, h = 0; cin>>n>>h;

        vector<int> v; vector<int> v1;

        for(int i = 0; i != n; i++){int a; cin>>a; v.push_back(a);}

        for(int j = 1; j <= h; j++)
        {
            int hold = 0;

            for(auto k : v)
            {
                if (j >= k){hold +=1;}

                else if (j < k){if(k % j == 0){hold += (k/j);} else{hold += ((k/j)+1);}}
            }

            if (hold <= h){v1.push_back(j);}
        }
        cout<<*min_element(v1.begin(),v1.end())<<endl;
    } 
}
#包括
使用名称空间std;
int main()
{
int t;cin>>t;while(t--)
{
int n=0,h=0;cin>>n>>h;
向量v;向量v1;
对于(inti=0;i!=n;i++){inta;cin>>a;v.push_back(a);}
对于(int j=1;j=k){hold+=1;}
else如果(j如果(按住是否检查了min_element函数的返回值?根据用户输入,min_element函数返回一个迭代器到“last element”,它基本上是一个nullptr。由于您直接取消引用它,您会得到错误。

是否确定
v1
的大小非零?是否使用了调试器或valgrind?他们会告诉您正在分段的特定行。思想结束()引用一个超过最后一个的元素,而不是最后一个元素本身?根据此min_,如果范围为空,则元素返回last。最后一个元素是无效指针。因此,直接取消对它的引用会导致此错误。根据问题陈述,如果范围为空,我应该怎么做我会检查用户输入是否有效。在您发布的代码中,例如,用户可以输入负长度。