埃拉托色尼筛法 C++ - 内存中的范围错误
Sieve of Eratosthenes C++ - Range Error at memory
我正在编写这个使用 Sieve 的简单代码,但是有一个错误使程序无法编译。您可以在下面找到代码:
// sieve_of_erathosthenes.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "../../Library/std_lib_facilities.h"
int main()
{
// Create a boolean array "prime[0..n]" and initialize
// all entries it as true. A value in prime[i] will
// finally be false if i is Not a prime, else true.
int n = 30;
vector<int>prime;
for (size_t i = 0; i < n; i++) {
prime.push_back(true);
}
for (int p = 2; p*p <= n; p++)
{
// If prime[p] is not changed, then it is a prime
if (prime[p] == true)
{
// Update all multiples of p
for (int j = p * 2; j <= n; j += p)
prime[j] = false;
}
}
cout << "Following are the prime numbers smaller than or equal to " << n << '\n';
// Print all prime numbers
for (int p = 2; p <= n; p++)
if (prime[p])
cout << p << " ";
return 0;
}
错误是:sieve_of_erathosthenes.exe 中 0x772308F2 处的未处理异常:Microsoft C++ 异常:内存位置 0x004FF670 处的 Range_error。
我是一名新生,我很难翻译调试器错误...
谢谢大家!
在你的 for
循环中,终止条件应该是 p<n
因为你的向量的大小是 n
并且向量是 0 索引的。
因此,访问 prime[n]
超出范围。这就是错误的原因。
我正在编写这个使用 Sieve 的简单代码,但是有一个错误使程序无法编译。您可以在下面找到代码:
// sieve_of_erathosthenes.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "../../Library/std_lib_facilities.h"
int main()
{
// Create a boolean array "prime[0..n]" and initialize
// all entries it as true. A value in prime[i] will
// finally be false if i is Not a prime, else true.
int n = 30;
vector<int>prime;
for (size_t i = 0; i < n; i++) {
prime.push_back(true);
}
for (int p = 2; p*p <= n; p++)
{
// If prime[p] is not changed, then it is a prime
if (prime[p] == true)
{
// Update all multiples of p
for (int j = p * 2; j <= n; j += p)
prime[j] = false;
}
}
cout << "Following are the prime numbers smaller than or equal to " << n << '\n';
// Print all prime numbers
for (int p = 2; p <= n; p++)
if (prime[p])
cout << p << " ";
return 0;
}
错误是:sieve_of_erathosthenes.exe 中 0x772308F2 处的未处理异常:Microsoft C++ 异常:内存位置 0x004FF670 处的 Range_error。
我是一名新生,我很难翻译调试器错误... 谢谢大家!
在你的 for
循环中,终止条件应该是 p<n
因为你的向量的大小是 n
并且向量是 0 索引的。
因此,访问 prime[n]
超出范围。这就是错误的原因。