0

私はすぐに、エラトステネスのシーブを使用する素数プログラムを作成しました。プログラムを実行すると 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;
}

また、悪いプログラミング手法も教えてください。

4

4 に答える 4