使用动态布尔数组的问题

时间:2019-07-10 15:36:01

标签: c++ arrays dynamic boolean

我想为我的C ++程序动态声明一个布尔数组并将其值设置为false。我在内存分配方面遇到问题,我猜想如何获得悬挂指针 我正在尝试通过Eratosthenes的Sieve查找素数,我正在尝试动态使用布尔数组,但面临问题。

我不打算使用memset来实现它。

int  limit = 2000000 ;
int crossLimit = sqrt(limit) ;


void  SievePrime(int limit)
{

    bool* boolArray = new bool[false] ;

    for(int i =4;i<=limit ;i = i + 2)
    {
        boolArray[i] = true ; //getting error hereThread 1:                       
                         //EXC_BAD_ACCESS (code=2, address=0x100786000)
    }

    for(int j= 3 ;j<=crossLimit ; j= j+2){
        if (not boolArray[j])

        {
            for(int k =j*j;k<=limit;k*=2)
        {
            boolArray[k] = true ;
        }
    }
}

    double sum = 0 ;

    for(int i =2 ; i<=limit ;i++)
    {
        if(!boolArray[i])
        {
            sum = sum + i ;
        }
    }

    cout<<sum<<endl ;
}

预期输出: 142913828922

错误:线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x100786000)

1 个答案:

答案 0 :(得分:2)

我觉得您是C ++的新手。

“假”通常为零,因此您不会分配任何东西。

bool* boolArray = new bool[false] ;

尝试:

bool* boolArray = new bool[limit];


for(int i =0; i<limit; i+)
{
    boolArray[i] = false;                       
}

并在末尾添加一个删除内容

delete boolArray;

此外,该循环将超出范围。如果您有N个项目,则最后一个有效条目为N-1,因为第一个为0。因此,在for循环中使用k<limit