执行代码时收到了分段错误。有什么问题?

时间:2014-10-21 04:29:51

标签: c segmentation-fault

我正在学习C编程并尝试编写代码进行计算。我的程序运行时出现分段错误。

问题出在哪里?

#include<stdio.h>
#include<string.h>

int main()
{   
    int n,i,j,k; 
    int c,x[10];
    printf("Enter the number of springs ");                                 
    scanf("%d",&n);

    int f[n],s[n],A[n][n+1][n+2]; //declare my variables here

    memset(A, 0, n*n+1*n+2*(sizeof(A))); //put all to zeros

    //store datas for stiffness and strength

    for(i=1;i<=n;i++)
    { 
        printf("Enter the stiffness of spring %d\n",i);                 
        scanf("%d",&s[i]);
    }

    for(i=1;i<=n;i++)
    {
        printf("Enter the force applied to the spring %d\n",i); 
        scanf("%d",&f[i]);
    }

    for(i=1;i<=n;i++){
        printf("\nforce applied in f[i] = %d",f[i]);
    }


    //computation for element 1 matrix

    for(k=1;k<=n;k++)

    for(i=1;i<=n+1;i++)

    {
        for(j=1;j<=n+2;j++)
        { 
            if(j==k||j==(k+1))
               A[k][i][j]=s[j];

            if(j==n+3)
                A[k][i][j]=f[j];
        }  
    } 

    for(k=1;k<=n;k++)
    {
        printf("\nmy n=%d matrix is\n",k);

        for(i=1;i<=(n+1);i++)
        {
            for(j=1;j<=(n+2); j++)
                printf("%d\t", A[k][i][j]);

                printf("\n");
        }
     }

     return 0;
}

3 个答案:

答案 0 :(得分:0)

分段错误的原因可能是您的程序试图从分配的范围内访问内存。即,在这一行:

memset(A, 0, n*n+1*n+2*(sizeof(A)));

sizeof(A)就是你需要的。当你将它乘以n,n + 1,n + 2时,你命令memset来改变你没有为你的程序分配的内存。

答案 1 :(得分:0)

我没有查看所有代码,但我认为只需指出语句

即可
memset(A, 0, n*n+1*n+2*(sizeof(A))); 

必须有

memset( A, 0, n * ( n+1 ) * ( n+2 ) * sizeof( int ) ); 

另请注意,如果您定义了一个数组,例如

int s[n];

那么索引的有效范围将是0, n-1,所以循环看起来像

for( i = 0; i < n; i++ )
{ 
    printf("Enter the stiffness of spring %d\n",i);                 
    scanf("%d",&s[i]);
}

答案 2 :(得分:0)

更改memset(A,0,n*n+1*n+2*(sizeof(A)));

memset( A,0,n*(n+1)*(n+2)*sizeof(int)); 

for循环初始化应为i=0;且条件为i<n