【发布时间】:2016-03-17 03:57:28
【问题描述】:
我尝试使用筛法找出从 1 到 100000 有多少个素数。 这是我的代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char *a = new char[100000];
memset(a, '1', 100000*sizeof(char));
for(int i=2; i<100000; i++)
{
if(a[i] == '1')
{
for(int j=i*i; j<100000; j += i)
{
a[j] = '0';
}
}
}
int count = 0;
for(int i=2; i<100000; i++)
{
if(a[i] == '1')
count++;
}
cout << count << endl;
delete [] a;
return 0;
}
这段代码编译没有错误,但是当我运行它时,程序崩溃了。
我将数组大小从 100000 更改为 40000。我得到结果 4203,所以从 1 到 40000 有 4203 个素数
我知道我的 32 位操作系统中数组的最大字节是 0x7fffffff 字节。
100000 个字符或 40000 个字符都远小于 0x7fffffff 字节。
为什么当数组大小为100000时,程序carsh。当数组大小为40000时,程序工作?我的代码有什么问题吗?
【问题讨论】:
-
既然是C++,为什么不是std::vector?
标签: c++ arrays memory-management