C-动态阵列中扫描值的分割故障(int ** arr)



此代码给出了分割故障。在由GDB调试时,它给出了此错误:

"程序接收到信号sigsegv,分割故障。 0x00007ffff7a6dde5 in _io_vfscanf_internal(s =, 格式=,argptr = argptr@entry = 0x7ffffffffdba8, errp = errp@entry = 0x0)at vfscanf.c:1902 1902 vfscanf.c:没有这样的文件或目录。"

void  readData()
{
int **arr,m;
scanf("%d",&m);
arr = (int **)malloc(sizeof(int)*m);
    for(int i=0;i<m;i++)
    {
    arr[i] = (int *)malloc(sizeof(int) * 2);
    }
    for(int i=0;i<m;i++)
    {
    printf("..%d ..n",i); // if m = 20 then running only 12 times
    scanf("%d %d",&arr[i][0],&arr[i][1]);
    }
}
int main()
{
readData();
}

如果M = 20,则第二个环仅运行12次,然后给出分段故障。当第一个循环运行20次时。请帮助我。

arr = (int **)malloc(sizeof(int)*m);

这应该是

arr = malloc(sizeof(int*)*m);

由于您需要分配m指针,而不是m INT。或更好,

arr = malloc(sizeof(*arr)*m);

(顺便说一句,不要抛出Malloc的结果。)

以下行有问题

arr = (int **)malloc(sizeof(int)*m);

您是在分配尺寸(int)次m,这应该更改为sizeof(int *) *m以保持地址而不是int(这些可能是不同的尺寸,并且可能导致问题)。所以这应该如下

scanf("%d",&m);
arr = (int **)malloc(sizeof(int *)*m);
    for(int i=0;i<m;i++)

最新更新