我的代码中的分段错误(核心转储)

时间:2015-11-10 08:53:23

标签: c

我在代码中找不到错误。 当我运行它时,它表示分段错误(核心转储)。 我读了主题,但无法理解我的错误。 它位于适当的目录中。 如果有人可以帮助我,我将非常感激。

#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;
}

2 个答案:

答案 0 :(得分:4)

  for(i=0;i<n/2;i++){
      for(j=n-1;j>n/2;j++){     /*    <--- This loop      */

在此循环中,您应该递减jj--也是如此。

因为j=n-1并且你增加它,amax个元素,所以这个循环将访问索引超出范围并导致未定义的行为

所以你应该在循环中递减j

答案 1 :(得分:0)

代码中的问题在

行中
for(j=n-1;j>n/2;j++){

在此行中,您将增加j的值超出其分配的限制。而你正试图访问[j]。这是 Out of bound阵列访问的示例。即您正在尝试访问尚未声明的数组元素。

a [j]可能位于不属于您当前正在运行的程序的内存位置(这可能会导致程序崩溃,例如分段错误)。可能这就是您的代码中出现分段错误的原因。

编辑:在您的程序上运行gdb后,我发现该程序终止了信号 SIGSEGV

SIGSEGV是在进行无效内存引用或分段错误时发送给进程的信号。

我建议您也使用gdb来调试错误