此代码给出了分段错误。在GDB调试时,它给出了这个错误:
“程序接收信号SIGSEGV,分段故障。 _IO_vfscanf_internal中的0x00007ffff7a6dde5(s =, format =,argptr = argptr @ entry = 0x7fffffffdba8, erf = errp @ entry = 0x0)at vfscanf.c:1902 1902 vfscanf.c:没有这样的文件或目录。 “
{{1}}
如果m = 20那么,第二个循环只运行12次然后给出分段错误。第一个循环运行20次。 请帮帮我。
答案 0 :(得分:5)
arr = (int **)malloc(sizeof(int)*m);
这应该是
arr = malloc(sizeof(int*)*m);
因为您需要分配m
指针,而不是m
整数。或者更好,
arr = malloc(sizeof(*arr)*m);
(顺便说一下,不要施放malloc的结果。)
答案 1 :(得分:3)
以下行有问题
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++)