我正在尝试在C中为类实现Sieve算法.我不是要求为我完成这项任务.我已经写出了我的函数,但是我目前正在收到Segmentation Fault错误.我不是100%肯定那是什么.这是我的代码到目前为止,任何人都可以看到这个错误来自哪里?
#define EXTERN #include#include #include "header.h" void clearAll() { int i, j; seg *p; p = head; for(i = 0; i < NSegs; i++) { p = p -> next; for(j = 0; j < 256; j++) { p -> bits[j] = 0; } } } int setBit(int n) { int segment, index, hold, pos, i; seg *p; p = head; segment = n/256; hold = n; while(hold > 65) { hold = hold - 65; index++; } pos = (hold - 1)/2; for(i = 0; i < segment; i++) { p = p -> next; p->bits[index] = p->bits[index] | (1 << pos); } } int testBitIs0(int n) { int segment, index, hold, pos, i, r; seg *p; p = head; segment = n/256; hold = n; while(hold > 65) { hold = hold - 65; index++; } pos = (hold - 1)/2; printf("%d, %d, %d ", segment, index, pos); for(i = 0; i < segment; i++) { p = p -> next; r = p->bits[index] & (1 << pos); } } void sieveOfE( int N ) { int i, j, k; k = 1; // Start with 2 to find all primes while ( k <= N ) { for ( i = k; i <= N; i++){ if(i % 2 == 0) { break; } if ( testBitIs0(i) ){ break; } } for ( j = 2*i; j <= N; j = j + i ){ setBit(j); } k = i+1; } } int countPrimes(int n){ int count, i; count = 0; for(i = 0; i <= n; i++) { if(testBitIs0(i) ){ count++; } } return count; } int printPrimes(int n){ int i; for(i = 0; i <= n; i++) { if(testBitIs0(i) ){ printf("%d ", i); } } printf("\n\n"); }
链接列表已在主文件和头文件中正确初始化.初始化来自框架文件,不应编辑.但是每个链表节点包含一个位数组和一个指向下一个节点的指针.