#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j,k,n,q;
scanf("%d%d%d",&n,&k,&q);
int *m=malloc(5*sizeof(int));
int **a=malloc(20*sizeof(int));
//int a[10][10],m[10];
for(i=0;i<k;i++)
a[i]=malloc(sizeof(int));
for(i=0;i<n;i++)
{scanf("%d",&a[0][i]);}
for(i=0;i<q;i++)
{scanf("%d",&m[i]);}
for(i=0;i<k;i++)
{
for(j=0;j<n;j++)
{
if(j==(n-1)) a[i+1][0]=a[i][j];
else
a[i+1][j+1]=a[i][j];
}
}
for(i=0;i<q;i++)
printf("%d\n",a[k][m[i]]);
return 0;
}
我在代码块中尝试了此代码,但在输入 m[]
的值后,它似乎不接受任何值。
错误是:“matright.exe 已停止工作”。
我输入的输入是:
3 2 3
1 2 3
0
1
2
最佳答案
第二个malloc
int **a=malloc(20*sizeof(int));
应该是
int **a=malloc(20*sizeof(int*));
第三个malloc
a[i]=malloc(sizeof(int));
只为一个元素分配内存,但您可以使用 n
循环来执行此操作。
编辑(来自 TobySpeight):
此外,数组长度已被硬编码。从下面的循环猜测,您应该分配:
int *m = malloc(q * sizeof(int));
int **a = malloc(k * sizeof(int*));
第三个为
a[i] = malloc(n * sizeof(int));
关于C 程序抛出运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40159824/