can*_*ton 0 c segmentation-fault
我是C的新手,我遇到了一个我无法理解的分段错误.我有以下程序,它试图计算严格正数的因子数:
#include <stdio.h>
#include <math.h>
int numberOfFactors (int number, int factor) {
if (number % factor == 0) {
number = number/factor;
return numberOfFactors(number, factor) + 1;
} else {
return 0;
}
}
int check (int x) {
if (x>0) {
return 1;
} else {
return 0;
}
}
int main(void) {
int number;
printf("Please enter a positive integer n such that n >= 1: ");
scanf("%d", &number);
if (check(number)){
int i;
for (i=1; i<=number; i++) {
int factors;
factors = numberOfFactors(number, i);
printf("%d^%d ", i, factors);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输入整数后立即发生分段错误,在main()中的这些行之后输入:
printf("Please enter a positive integer n such that n >= 1: ");
scanf("%d", &number);
Run Code Online (Sandbox Code Playgroud)
这些行中的内容导致了分段错误,我该怎么做才能避免它?
如果你试图除去因子1,你的递归不会停止.
让因子永远不会是1:
for (i=2; i<=number; i++) {
int factors;
factors = numberOfFactors(number, i);
printf("%d^%d ", i, factors);
}
Run Code Online (Sandbox Code Playgroud)
我应该说为什么它是段错误:这是因为每个函数调用都会推送当前程序计数器(程序中你当前所在的位置)和堆栈上的函数参数(也就是调用堆栈),其中堆栈是一个使用的相对较小的内存块因为,函数调用和局部变量.
因此,如果你过于努力地推动你的筹码,那么它将会崩溃.比赛结束,又名段错误;)