C++ 我的代码不适用于输入1和1000或任何其他较大的输入

C++ 我的代码不适用于输入1和1000或任何其他较大的输入,c++,segmentation-fault,C++,Segmentation Fault,当我试图为输入1和1000运行此代码时,它会显示分段错误。此代码中的更正是什么 void sorting(int sum[],long int k); int main() { int sum[100000]; int L,R,i,j; long int k=0; cin>>L; cin>>R; for(i=L;i<=R;i++) { for(j=i;j<=R;j++)

当我试图为输入1和1000运行此代码时,它会显示分段错误。此代码中的更正是什么

void sorting(int sum[],long int k);

int main() {
    int sum[100000]; 
    int L,R,i,j;
    long int k=0;

    cin>>L;

    cin>>R;
    for(i=L;i<=R;i++)
    {
        for(j=i;j<=R;j++)
        {
            sum[k]=i^j;
            k++;
        }
    }

    sorting(sum,k);

    cout<<sum[k-1];
    return 0;
}

void sorting(int sum[],long int k)
{
    int i,j;
    long int temp;
    for(i=0;i<k;i++)
    {
        for(j=0;j<k;j++)
        {
            if(sum[i]<=sum[j])
            {
                temp=sum[i];
                sum[i]=sum[j];
                sum[j]=temp;
            }
        }
    }

}

分段错误是由堆栈溢出引起的。这一行:

int sum[100000]; 
sum使用400K的堆栈空间,这比堆栈的正常大小要大


要解决这个问题,可以使用std::vector来实现sum。

我认为问题不在于堆栈大小,而在于变量k的内容

看起来你有算术级数,所以你可以用算术级数和的方程来计算mysize

使用std::vector,它不太容易出错,因为std::vector可以增长,所以您可以简单地将元素推回循环中

定义和变量


使用调试器将问题缩小到可能重复的范围
for(i=L;i<=R;i++)
{
    for(j=i;j<=R;j++)
    {
        sum[k]=i^j;
        k++;
    }
}
std::unique_ptr<int[]> sum = std::make_unique<int[]>(mysize);
//or if make_unique is not available
std::unique_ptr<int[]> sum(new int[mysize]);
 std::vector<int> sum;
 sum.push_back(i^j);