關於Segmentation fault(段錯誤)探究
阿新 • • 發佈:2018-12-11
在編寫演算法競賽習題2.5時,資料無法正常輸入到檔案data1.out,用gdb除錯的時候,報錯:
Program received signal SIGSEGV, Segmentation fault. __chkstk_ms () at …/…/…/src/gcc-6.3.0/libgcc/config/i386/cygwin.S:172 172 …/…/…/src/gcc-6.3.0/libgcc/config/i386/cygwin.S: No such file or directory.
經過除錯,發現是給陣列分配的空間過大。
void freopenMethod(){ freopen("data1.in", "r", stdin); freopen("data1.out", "w", stdout); int a[100000]; // 當給它分配過大空間,會報錯Program received signal SIGSEGV, Segmentation fault.__chkstk_ms () at ../../../ int n,m; int count; while(scanf("%d", &n)==1){ count = 0; for(int i=0; i<n; i++){ scanf("%d", &a[i]); } scanf("%d", &m); for(int i=0; i<n;i++){ if(a[i]<m) count++; } printf("%d\n", count); printf("%.3lf\n", (double)clock()/CLOCKS_PER_SEC); } }
我猜測這可能和程式記憶體分配有關,當分配過大陣列,導致記憶體越界。