在C中使用链表实现Eratosthenes的Sieve(分段错误)

 枇杷语1314 发布于 2023-02-11 19:50

我正在尝试在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");

} 

链接列表已在主文件和头文件中正确初始化.初始化来自框架文件,不应编辑.但是每个链表节点包含一个位数组和一个指向下一个节点的指针.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有