【发布时间】:2019-11-20 06:49:48
【问题描述】:
我想为我的 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)
【问题讨论】:
-
bool* boolArray = new bool[false] ;你觉得你在这里做什么? -
将索引值设为假
-
您在
new bool[...]中给出的值应该是您的数组的大小,它与您的数组元素的值不对应。所以问题是你正在遍历一个分配不善的数组 -
这里
false是0
标签: c++ arrays dynamic boolean