C 程序抛出运行时错误

标签 c arrays pointers

#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/

相关文章:

c - Win32 "C"未处理的异常在错误的位置中断

c - 读取一行、标记并分配给 C 中的结构体

c - 使用指针获取数据并在C中的另一个函数中使用它们

c - 指向字符数组第一个字符的指针?

c - 解决密码学问题,代码需要很长时间才能运行,需要对其进行优化

c - 使用 char 指针的段错误 (C)

java - 新用户持有搜索数组

c++ - 为结构成员分配的内存是连续的吗?如果结构成员是数组怎么办?

Android:从另一个文件中的数据构建一个数组

c++ - 指定的内存位置中没有指针。删除操作有什么问题?