2015-02-07 58 views
0

该代码在确切的第5行输入处给出了分段错误。 如果n < 5或在调试器中一切正常。第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

不要用C投malloc'的'的结果! – 2015-02-07 16:43:24

回答

4

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

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

试试这个

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

你的错误:你在int小号分配内存,而你需要int pointer小号

(如你的m阵列将要举办的其他INT数组指针)

错误:

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

正确:

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

不要在C中投入'malloc'的结果! – 2015-02-07 16:43:05

+0

为什么?如果它是C++?有什么不同? – SomethingSomething 2015-02-07 23:46:45

+0

谢谢你的重要评论!我刚刚看到这篇文章:http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – SomethingSomething 2015-02-07 23:50:07