我想为我的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)
答案 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
。