1

動的計画法の問題を解決するのに役立つブール値の 2 次元テーブルを使用する必要があります。残念ながら、カウントされた結果を印刷したいという問題が発生しました。以前は c++ でコーディングしたことがあまりなかったので、このコードの何が問題なのかわかりません。特に、ここではカスタムメイドの構造体、クラス、またはポインターを使用しておらず、反復子の配列境界が正しいかどうかを再確認しました。

これが私の問題の例である簡単なコードです:

const short int N=1001;
const short int M=10001;

int main() {
    bool tab[N][M];
    for (int i=0;i<N;i++)
        for (int j=0;j<M;j++)
            tab[i][j]=false;

    int foo=0;
    for (int i=0;i<N;i++)
        for (int j=0;j<M;j++)
            if (!tab[i][j])
                foo++;

    cout << foo << endl;

    return 0;
}

foo 値を印刷しようとするとセグメンテーション違反エラーが発生するのはなぜですか? その変数は、for 関数で値を大きくする前に初期化されます。cout 行を削除すると、すべて問題なく、プログラムは作業を終了します (ただし、結果は表示されません)。この(おそらく)単純な問題を解決するのを手伝ってくれてありがとう。

4

1 に答える 1

2

整数変数には大きすぎる数値を格納しようとしているため、セグメンテーション違反エラーが発生します。

格納できる最大値が 32767 ( http://www.cplusplus.com/reference/climits/ )の場合、整数変数に 10011001 (1001 * 10001) を格納しようとしています。

于 2013-11-11T17:05:08.087 に答える