2010-12-11 9 views
2

私は初心者のコンピュータサイエンスの生徒で、バブルがランダムに割り当てられたフロートの配列をソートし、バイナリチョップ検索を使用して値を見つけるC++プログラムを作成しています配列内の最後の要素の(コードのタイミングを一致させるための一貫性のため)。ブースト日付時刻ライブラリとVisual Studio 2008を使用するとランタイムチェックに失敗する

バブルソートやバイナリチョップの検索を実行したいのですが、C++標準のタイムライブラリは2番目のレベルの精度しか得られません。このコードはほとんどの場合1秒未満で実行されるので使用できません。

私はブーストを発見したと私はブーストのDateTimeライブラリ内のマイクロ秒のクロックを使用してコードの実行のサブ秒の精度のタイミングを得るための方法として、それを使用しようとしています。私が使用しているコードはhttp://pastebin.com/U8D0s2hbです。このコードを実行すると、Visual Studio 2008から次のエラーが発生します。

ランタイムチェック失敗#0 - ESPの値が関数呼び出しで正しく保存されませんでした。これは通常、異なる呼び出し規約で宣言された関数ポインタを持つ呼び出し規約で宣言された関数を呼び出した結果です。

犯人はPTIMEオブジェクトとして時間を取得しているように見えるが、私は前に、ランタイムチェックの失敗のエラーを見たことがないよう、なぜ見当がつかない。

ご協力いただきありがとうございます。

答えて

1

これは呼び出し規約の問題のようですが、実際には構造体の配置の問題です。

クライアントコードでは、構造体のデフォルトの配置を使用する必要があります。プロジェクトのプロパティでConfiguration PropertiesC/C++Code Generationを選択し、Structure Member AlignmentオプションがDefaultに設定されていることを確認します。

この問題に関する別の質問は、hereを参照してください。

+0

私はProject PropertiesFrédéricのStructure Member Alignmentをチェックしました。デフォルトで設定されていました。私はまた、改善なしでそれの下のすべての設定を試してみました。私はBoostの経験がないので、次に何を試していいのか分かりません。 –

+0

@Daniel、同じコンパイラで 'boost'自体をコンパイルできますか?結果として得られる図書館のABIは、お客様のクライアントコードに近いものとなり、おそらくより効果的です。 –

0

私はboost.threadと同じ問題がありました。

Iは、変更履歴を追跡し、私は< ブースト/ thread.hpp>前> < WINDOWS.Hヘッダを追加することを見出しました。 windows.hヘッダーがboost/thread.hppを混乱させる呼び出し規約を定義していると思われたので、boost/thread.hppの後にwindows.hファイルを置くと問題はなくなりました。

これが役に立ちます。

関連する問題