C++ 我的代码不适用于输入1和1000或任何其他较大的输入
当我试图为输入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++)
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);