Siv*_*bbu 1 c arrays segmentation-fault
#include<stdio.h>
#include <stdlib.h>
int main()
{
int n,small=0,large=0,s,l,temp;
printf("this should work");
scanf("%d",&n);
// printf("%d",n);//
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
/* for(int i=0;i<n;i++)
printf("%d",a[i]);*/
small=a[0];
large=a[n-1];
for(int i=0;i<n;i++)
{
if(a[i]<small && i!=0)
{
small=a[i];
s=i;
}
if(a[i]>large && i!=n-1)
{
large=a[i];
l=i;
}
}
temp=a[s];
a[s]=a[l];
a[l]=a[s];
for(int i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的程序,用于交换数组中最大和最小的数字并打印新数组.当我尝试运行此程序时,我遇到了分段错误.通常,当我们尝试访问超出范围的内存位置时会发生分段错误.所以我添加了printf语句来找出错误的位置.但是没有执行任何打印语句.这里的错误是什么?
一个问题是,你不实际设置s和l任何东西,除非你发现小/比当前更大的元素.
这意味着(例如),如果第一个元素是最小的,s将被设置为某个任意值并尝试使用它索引数组可能会有问题.
为了解决这个问题,在哪里设置small和large,你还应该设置:
s = 0;
l = n - 1;
Run Code Online (Sandbox Code Playgroud)
此外,您的交换代码是错误的,应该是:
temp = a[s];
a[s] = a[l];
a[l] = temp;
Run Code Online (Sandbox Code Playgroud)