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

时间:2017-02-27 02:46:52

标签: c data-structures segmentation-fault malloc dynamic-arrays

此代码给出了分段错误。在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次。 请帮帮我。

2 个答案:

答案 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++)