第5次扫描后的分段错误

时间:2015-02-07 16:36:22

标签: c scanf sigsegv

此代码在输入的第5行给出了分段错误。    如果n <5或在调试器中一切正常。

scanf("%d %d",&n,&x);
m=(int**)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
     m[i]=(int*)malloc(2*sizeof(int));
 }

 for(i=0;i<n;i++)
{
  scanf("%d %d",&m[i][0],&m[i][1]); 

 }`

2 个答案:

答案 0 :(得分:4)

假设sizeof (int)sizeof (int*)相同

m=(int**)malloc(n*sizeof(int));

试试这个

m = malloc(n * sizeof *m);

答案 1 :(得分:0)

您的错误:在需要int s

时为int pointer分配内存

(因为你的m数组将保存其他int数组的指针)

错误:

m=(int**)malloc(n*sizeof(int));

正确的:

m=(int**)malloc(n*sizeof(int*));