我正在学习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;
}
答案 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
。