2015-02-07 54 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