0

私は中程度の適性を持つ 3 人のプログラマーのチームの一員であり、現在、新しい暗号化アルゴリズムを具体化するために C++ でプログラムを作成しようとしています。ただし、ある時点で文字列の長さを超えていることを示すエラーが発生しました。私はこれを自分でデバッグしようとしましたが、うまくいきませんでした。ただし、それは jumble() 関数にあります...

とにかく、これは一時的な main() 関数を含むソースコードの貼り付けです: http://pastebin.com/GvvYAsKg

コンパイルは問題なく実行できますが、実行すると次のエラーが発生します。

「std::out_of_range」のインスタンスをスローした後に呼び出された終了
what(): basic_string::substr 中止

4

2 に答える 2

7

あなたの問題の1つはこの行にあります:

for(int i = 0; i < ( inPT.length() + 1 ); i++)

inPT[inPT.length]これは、文字列の末尾から 1 文字離れた場所にアクセスしようとすることを意味します。あなたがしたい

for(int i = 0; i < inPT.length(); i++)

または、より慣用的な C++ 構造を使用している可能性があるstd::for_eachため、この種のフェンスポスト エラーを発生させることはできません。コメントに記載されているように、これをデバッガーで実行すると、すぐに指摘されます。

于 2013-05-03T18:47:38.410 に答える
7

おそらくこのコード

if(modCount >= inPT.length())
{
    modCount = 0;
}
int mod = inKey.at(modCount);         

読むことを意図しています

if(modCount >= inKey.length())
{
    modCount = 0;
}
int mod = inKey.at(modCount);         

範囲外のアクセスに対するガードがinKey間違った変数を使用しています。

于 2013-05-03T18:48:26.060 に答える