动态数组中扫描值的分段错误(int**arr)

cod*_*rAJ -1 c malloc segmentation-fault dynamic-arrays data-structures

此代码给出了分段错误.在GDB调试时,它给出了这个错误:

"程序收到信号SIGSEGV,分段错误.在_IO_vfscanf_internal中的0x00007ffff7a6dde5(s =,格式=,argptr = argptr @ entry = 0x7fffffffdba8,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();
}
Run Code Online (Sandbox Code Playgroud)

如果m = 20那么,第二个循环只运行12次然后给出分段错误.第一个循环运行20次. 请帮帮我.

asc*_*ler 5

arr = (int **)malloc(sizeof(int)*m);
Run Code Online (Sandbox Code Playgroud)

这应该是

arr = malloc(sizeof(int*)*m);
Run Code Online (Sandbox Code Playgroud)

因为你需要分配m指针,而不是m整数.或更好,

arr = malloc(sizeof(*arr)*m);
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,不要转换malloc的结果.)