[英]Implementing Sieve of Eratosthenes using Linked List in C (Segmentation Fault error)
我正在嘗試為一個類在C中實現Sieve算法。 我不是要為我完成這項任務。 我已經寫出了函數,但是當前遇到了Segmentation Fault錯誤。 我不是100%知道那是什么。 到目前為止,這是我的代碼,任何人都可以看到此錯誤的來源嗎?
#define EXTERN
#include <stdio.h>
#include <stdlib.h>
#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");
}
鏈接列表已在主文件和頭文件中正確初始化。 初始化來自框架文件,不應進行編輯。 但是每個鏈接列表節點都包含一個位數組和一個指向下一個節點的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.