C++ 如何正确识别具有布尔值的动态数组?
这段代码是用来查找一定范围内的素数的。我用的是埃拉托什尼算法。似乎我的动态数组的范围是错误的。因为当我输入50时,49在素数集中,当我输入30时,25仍在素数集中 我已经检查了for循环。应该没有问题C++ 如何正确识别具有布尔值的动态数组?,c++,dynamic-arrays,C++,Dynamic Arrays,这段代码是用来查找一定范围内的素数的。我用的是埃拉托什尼算法。似乎我的动态数组的范围是错误的。因为当我输入50时,49在素数集中,当我输入30时,25仍在素数集中 我已经检查了for循环。应该没有问题 void Eratosthenes(int n) { bool* prime; prime = new bool[n+1]; memset(prime, true, sizeof(prime)); for (int p = 2; p * p <= n; p+
void Eratosthenes(int n)
{
bool* prime;
prime = new bool[n+1];
memset(prime, true, sizeof(prime));
for (int p = 2; p * p <= n; p++)
{
if (prime[p] == true)
{
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
for (int p = 2; p <= n; p++)
if (prime[p])
cout << p << " ";
delete[] prime;
}
int main()
{
int n;
cout << "enter a interger " << endl;
cin >> n;
Eratosthenes(n);
return 0;
}
void Eratosthenes(int n)
{
布尔*素数;
素数=新布尔[n+1];
memset(prime,true,sizeof(prime));
对于(int p=2;p*p您可能需要更正应初始化的元素数:
memset(prime, true, sizeof(*prime)*(n+1));
sizeof(prime)
为您提供指向bool的指针的大小,它(可能)与数组的大小不匹配。您应该直接使用或仅使用n+1
。@ox5453-std::size()
对指针也不起作用。@Peter的观点很好。最好直接使用而不是memset
;它更难出错。我们能假设你是一个贫穷、愚昧的学生,你不能享受那些荣誉吗?vector
是一种性能上的打击(一堆比特打包正在进行中),但您可以轻松地将其初始化为true或false,它占用的内存将比阵列少得多。完全兼容,并为您处理所有内存管理细节,如安全释放其备份阵列。