私はすぐに、エラトステネスのシーブを使用する素数プログラムを作成しました。プログラムを実行すると appcrash が発生します。私はそれをデバッグし、それは私に言ったstd::bad_alloc. デバッガーは、コードのどの行で例外が発生したかを教えてくれませんが、システム コードのどの行を教えてくれます。私のソースは以下の通りです。私はC ++に少し慣れていません。
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
int main(int argc, char* argv[])
{
unsigned long long numt;
if(argc < 2) {
cout << "Usage: "<<argv[0]<<" <primes until...>" << endl;
return 1;
}
else if(atol(argv[1])) {
cout << "Usage: "<<argv[0]<<" <primes until...>" << endl;
return 1;
}
numt = atol(argv[1]);
vector<bool> primes(numt);
for each(bool b in primes) b = true;
primes[0] = false;
long double sqrtt = sqrt(numt);
for(unsigned long long l = 0; l<=sqrtt; l++) {
if(!primes[l]) continue;
for(unsigned long long cl = l; cl < numt; cl+= l) primes[cl] = false;
}
for(unsigned long long l = 0; l<numt; l++) if(primes[l]) cout << l;
return 0;
}
また、悪いプログラミング手法も教えてください。