[英]C Segmentation Fault With Printf() and Scanf()
我是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;
}
在main()中的這些行之后輸入整數並按ENTER鍵后,立即發生分段錯誤:
printf("Please enter a positive integer n such that n >= 1: ");
scanf("%d", &number);
這些行中的什么導致了分段錯誤,我該怎么做才能避免呢?
如果您嘗試分解因子一,則遞歸不會停止。
只是讓因子永遠不會是1:
for (i=2; i<=number; i++) {
int factors;
factors = numberOfFactors(number, i);
printf("%d^%d ", i, factors);
}
我應該說為什么會出現段錯誤:這是因為每個函數調用都會將當前程序計數器(程序中您當前站立的位置)和函數參數推入堆棧(也稱為調用堆棧),其中堆棧是使用的相對較小的內存塊函數調用和局部變量。
因此,如果您用力推動堆棧,堆棧將掉落。 游戲結束,也就是段錯誤;)
您可能對此遞歸有問題:
int numberOfFactors (int number, int factor) {
if (number % factor == 0) {
number = number/factor;
return numberOfFactors(number, factor) + 1;
} else {
return 0;
}
}
將您的numberOfFactors更改為以下內容:
int numberOfFactors (int number)
{
int i=1;
int ret=0;
for(;i<=number;i++) {
if (number%i == 0) {
ret++;
}
}
return ret;
}
然后,更改此部分:
if (check(number)){
int i;
for (i=1; i<=number; i++) {
int factors;
factors = numberOfFactors(number, i);
printf("%d^%d ", i, factors);
}
}
像這樣簡單一些:
if (check(number)){
factors = numberOfFactors(number);
printf("%d^%d ", number, factors);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.