【发布时间】:2017-03-12 04:17:38
【问题描述】:
#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;
}
这是一个交换数组中最大和最小数字并打印新数组的简单程序。 当我试图运行这个程序时,我遇到了分段错误。 通常,当我们尝试访问超出范围的内存位置时会发生分段错误。 所以我添加了 printf 语句来找出错误在哪里。 但是没有执行任何打印语句。这里有什么错误?
【问题讨论】:
-
1)
small=a[0]; large=a[n-1];-->small=a[0]; s=0; large=a[n-1]; l=n-1;2)a[l]=a[s];-->a[l]=temp; -
您可以使用C调试器gdb来查找出现分段错误的行。
-
请将编译器的警告调到最大,这样您就可以轻松获取可能的问题点的信息,就像这里的那些
标签: c arrays segmentation-fault