Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何正确识别具有布尔值的动态数组?_C++_Dynamic Arrays - Fatal编程技术网

C++ 如何正确识别具有布尔值的动态数组?

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+

这段代码是用来查找一定范围内的素数的。我用的是埃拉托什尼算法。似乎我的动态数组的范围是错误的。因为当我输入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++)
    {
        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,它占用的内存将比阵列少得多。完全兼容,并为您处理所有内存管理细节,如安全释放其备份阵列。