扫描动态数组中的值时出现分段错误 (int **arr)
Segmentation fault in scanning values in Dynamic array ( int **arr)
此代码出现分段错误。在 GDB 调试时出现此错误:
"Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a6dde5 in _IO_vfscanf_internal (s=,
format=, argptr=argptr@entry=0x7fffffffdba8,
errp=errp@entry=0x0) at vfscanf.c:1902 1902 vfscanf.c: No such file or directory. "
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();
}
If m=20 then, Second loop is only 运行 12 times and then giving segmentation fault.而第一个循环是 运行 20 次。
请帮帮我。
arr = (int **)malloc(sizeof(int)*m);
这应该是
arr = malloc(sizeof(int*)*m);
因为您需要分配 m
指针,而不是 m
整数。或者更好,
arr = malloc(sizeof(*arr)*m);
(顺便说一句,不要强制转换malloc的结果。)
下一行有问题
arr = (int **)malloc(sizeof(int)*m);
您正在分配 sizeof(int) 乘以 m,这应该更改为 sizeof(int *)*m 以保存地址而不是 int(这些可能具有不同的大小并可能导致问题)。所以这应该如下
scanf("%d",&m);
arr = (int **)malloc(sizeof(int *)*m);
for(int i=0;i<m;i++)
此代码出现分段错误。在 GDB 调试时出现此错误:
"Program received signal SIGSEGV, Segmentation fault. 0x00007ffff7a6dde5 in _IO_vfscanf_internal (s=, format=, argptr=argptr@entry=0x7fffffffdba8, errp=errp@entry=0x0) at vfscanf.c:1902 1902 vfscanf.c: No such file or directory. "
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();
}
If m=20 then, Second loop is only 运行 12 times and then giving segmentation fault.而第一个循环是 运行 20 次。 请帮帮我。
arr = (int **)malloc(sizeof(int)*m);
这应该是
arr = malloc(sizeof(int*)*m);
因为您需要分配 m
指针,而不是 m
整数。或者更好,
arr = malloc(sizeof(*arr)*m);
(顺便说一句,不要强制转换malloc的结果。)
下一行有问题
arr = (int **)malloc(sizeof(int)*m);
您正在分配 sizeof(int) 乘以 m,这应该更改为 sizeof(int *)*m 以保存地址而不是 int(这些可能具有不同的大小并可能导致问题)。所以这应该如下
scanf("%d",&m);
arr = (int **)malloc(sizeof(int *)*m);
for(int i=0;i<m;i++)