我用C ++编写了一个非常基本的eratosthenes筛子,但是当n
为1000000
(一百万)时,代码崩溃了。我无法解决问题,现在需要帮助。
#include <iostream>
#include <vector>
using namespace std;
int main(){
long n = 1000000,i ,j;
vector<bool> arr(n, true);
for(i = 2; i * i < n; i++){
if(arr[i]){
for(j = i + i; j <= n; j += i){
arr[j] = false;
}
}
}
cout << "Made it here." << endl;
return 0;
}
一些信息:
n = 100000
或n = 10000000
不会出错(非常奇怪)并且代码工作正常,因此超过一百万的值不会产生问题,而一百万则会出错(崩溃)。"Made it here."
1 total unaddressable access(es)
,这是我找不到的。感谢您的帮助。
编辑:Drmemory
中错误的更多通知说明 Error #1: UNADDRESSABLE ACCESS beyond heap bounds: writing 0x0000000003921608-0x000000000392160c 4 byte(s)
答案 0 :(得分:1)
for(j = i + i; j <= n; j += i){ arr[j] = false;
j == n
时会发生什么?您访问超出范围的arr[n]
为arr.size() == n
。
这是未定义的行为。您的程序可能会崩溃,或者可能会无声地继续,或者它可能会执行其他操作。你不能推断会发生什么,因为 - 按照定义 - 行为没有被定义。