我在代码中找不到错误。 当我运行它时,它表示分段错误(核心转储)。 我读了主题,但无法理解我的错误。 它位于适当的目录中。 如果有人可以帮助我,我将非常感激。
#include<stdio.h>
#define MAX 50
int main(){
int i,n,j,t;
double a[MAX];
do{
printf("enter a lenght of your array");
scanf("%d", &n);
}while (n<1 || n>MAX);
printf("enter the elements of your array");
for (i=0; i<n; i++) {
printf("a[%d]= ", i);
scanf("%lf", &a[i]);
}
for(i=0;i<n/2;i++){
for(j=n-1;j>n/2;j++){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0; i<n; i++) {
printf("%lf", a[i]);
}
return 0;
}
答案 0 :(得分:4)
for(i=0;i<n/2;i++){
for(j=n-1;j>n/2;j++){ /* <--- This loop */
在此循环中,您应该递减j
,j--
也是如此。
因为j=n-1
并且你增加它,a
有max
个元素,所以这个循环将访问索引超出范围并导致未定义的行为
所以你应该在循环中递减j
。
答案 1 :(得分:0)
代码中的问题在
行中for(j=n-1;j>n/2;j++){
在此行中,您将增加j的值超出其分配的限制。而你正试图访问[j]。这是 Out of bound阵列访问的示例。即您正在尝试访问尚未声明的数组元素。
a [j]可能位于不属于您当前正在运行的程序的内存位置(这可能会导致程序崩溃,例如分段错误)。可能这就是您的代码中出现分段错误的原因。
编辑:在您的程序上运行gdb后,我发现该程序终止了信号 SIGSEGV
SIGSEGV是在进行无效内存引用或分段错误时发送给进程的信号。
我建议您也使用gdb来调试错误