此代码给出了分割故障。在由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++)