Quando eseguo il seguente codice con gcc
compilato con (solo l'opzione attivata è -std=c99
) ed eseguo l'eseguibile, ottengo un errore di segmentazione (core scaricato).Perché questo codice ricorsivo genera un segfault?
Perché è quello?
#include <stdio.h>
int count_factors(int n, int i) {
int m = n;
if (m == i) {
return 1;
} else if (m % i == 0) {
while (m % i == 0) m = m/i;
return 1 + count_factors(m, i);
} else {
return count_factors(m, i+1);
}
}
int main() {
int streak_size = 4;
int streak = 0;
int solution = 0;
int n = 2;
while (solution == 0) {
n += 1;
int c = count_factors(n, 2);
if (c == streak_size) {
streak += 1;
} else {
streak = 0;
}
if (streak == streak_size) solution = n;
}
printf("%i", solution);
return 0;
}
Perché non si esce mai dalla ricorsione in 'count_factors'. Metti 'printf ("% d% d \ n ", n, i);' all'inizio di 'count_factors' e capirai. –
Oh l'ironia, su un sito chiamato "StackOverflow". –
Dovresti sempre abilitare gli avvisi durante la compilazione, ad esempio '-Wall'. Nota che questo è un consiglio generale e potrebbe non aiutare a risolvere il tuo particolare problema. –