1. 程式人生 > >關於Segmentation fault(段錯誤)探究

關於Segmentation fault(段錯誤)探究

在編寫演算法競賽習題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);
	}
}

我猜測這可能和程式記憶體分配有關,當分配過大陣列,導致記憶體越界。