2016-08-14 14 views
0

文字列をwstringに変換するときに、以下の関数がランダムにクラッシュすることがあります。これはHTTPヘッダー(http://www.codeproject.com/Articles/66625/A-Fully-Featured-Windows-HTTP-Wrapper-in-C)を解析するために使用され、正常に動作しましたが、最近サーバーを変更したときにランダムに機能しなくなりました。 (このコードは、コードプロジェクトプロジェクトに付属するクラスに由来します)文字列をwstringに変換中にクラッシュする

なぜこのようなことが起こりますか?ここ数か月は正常に動作していて、サーバーを変更したときには動作しなくなってしまったのは私にとっては奇妙なことです。あなたがそのループに入るとしたときに、その後どんなにiの価値、あなたが原因以外にアクセスする未定義の動作を得るでしょう...

result[i] = wstring(Result[i].begin(), Result[i].end()); 

...、result.size() == 0を想定し

+0

'operator []'は**新しい**要素を 'std :: vector'に挿入しません。したがって 'result.size()!= 0'の場合、これもクラッシュします。 –

+0

'ベクトル結果;'サイズがゼロのベクトルを作成します。コンテンツを追加するときは、 'Result [i]'の代わりに 'Result.push_back()'を使うべきです。 –

+1

また、 'result'と' Result'の両方を持つことは、タイプミスまたは2つを求めるだけです! –

答えて

0

ベクトルの存在している要素。空ベクターResultに関して同一の問題を有している

result.size() != 0場合、このコードパスが実行され、...

vector<string> Result; 
if (result.size() != 0){ 
    for (int i = 0; i < result.size(); i++) { 
     Result[i] = string(result[i].begin(), result[i].end()); 
    } 
} 

...。

これはこれまでどのように機能しているのだろうかと思います。

+1

ありがとうございます。私はResult [i]とresult [i]の両方をpush_backで置き換えました。私は明日上に投稿したWinHTTPラッパーのコードを見ていきます。ちょうどそれを見てから(私が前にやったことはありませんでした)、奇妙なものがたくさんあります。 – TR3M4

関連する問題