2011-10-20 20 views
3

これは私が今までこのようなサイトを使用したのは初めてですが、私はかなり立ち往生午前中_CrtIValidHeapPoint(pUserData)アサーションの失敗を修正する方法。 以下のバックグラウンドセクションは完全性のために記載されています。その中に記述されている操作が現在直面している問題に寄与しているかどうかわかりません。C++のWinFormsアプリケーション

背景

同僚と私は大学の割り当てのためのVisual Studio 2010(完全版)に(デフォルト設定の)コンソールアプリケーションでのC++コードの全体の多くを書いていました。私たちはwinformsアプリケーションを手に入れたいと思ったので、Visual Studio 2010で作成し、すべてのコードをコンソールアプリケーションからインポートしました。私たちは、次の問題に直面しました:

すべての私たちの実装ファイルに「stdafx.hを」ファイルに私たちの含みを追加し、その後の#include「stdafx.hを」するために必要
  1. (.CPPさん)。我々は、C++文字列(STD ::文字列)を使用していた、我々は管理対象システムの文字列に変更しなければならなかった場所で
  2. (システム::文字列^)CLRの互換性のために。
  3. 「共通言語ランタイムサポート」のコンパイルオプションを/ clr:pureの代わりに/ clrに変更しました。これは、私たちがboost :: shared_ptrで持っていたリンクエラー(LNK2028、LNK2019)を解決するために必要でした...

私たちは上記のことを実行した後、プロジェクトをコンパイルしていました。

問題

我々は、次のアサーションの失敗を取得したアプリケーションの実行:ときのように、

_CrtIsValidHeapPointer(pUserData)

このアサーションはすぐに失敗し、一見実行されている任意のコードなしに私は彼らがデバッグ(コールスタックが空である)に達していないメインの先頭にブレークポイントを設定します。

私は実行するアプリケーションを取得することができた唯一の方法は、CLRのオプションを設定することであると/ CLR:純粋とブーストのすべての使用を取り除きます。

私は3つの質問があります。

  1. が実行されているコードのですか?私は、アサーションがコードが実行されずに失敗する可能性があるとは思わないことを知っています。おそらくメインの前に起こることはありますか?
  2. /clrと/ clr:pureオプションは実際に何を意味していますか?
  3. ライブラリをブーストできるかどうかは、clr互換コードにコンパイルできますか?もしそうなら、何がリンク問題を引き起こすかもしれませんか?

私は文字通り何を投稿すればいいのか分からないので、私はコードを投稿していません...どこに問題が発生しているのかわかりません。投稿するコードの提案があれば誰にでも公開しています。

よろしく ブラッド

答えて

1

は試してみて、あなたの特定の質問に答えるために:

  1. main()あなたコード全体ではなく、実行可能ファイルへのエントリポイントです。全体的な静的オブジェクトを初期化するだけでなく、大量の定型文の初期化も可能です。たとえば、次の例では関数は、メインが入力される前に実行されます。

    int SomeGlobal = SomeFunction(); 
    
        int main (void) 
        { 
        ... 
        } 
    
  2. 私は/ CLRゼロ経験の近くに​​持っているが、私はいくつかの便利な参照であなたを指すことができます。 How To Migrate to /clr/clr settingsにあなたに当てはまるものがすべて理解されていることを確認してください。

  3. もう一度直接的な知識はありませんが、this forum post on boost::shared_ptrthis SO question on boost::threadは問題があるようです。それはコンパイルし、実行を確認するために、「Hello World」のCLRプロジェクト空かで

    • スタート:

はさらに、私はいくつかのことをしようと、問題を診断します。

  • ブーストを使用して簡単なサンプルを試してみて、それが問題なく動作するかどうかを確認してください。
  • アプリケーションを完全に再構築して再構築してください。
  • pUserDataは、CStringデストラクタからのものです。すべての文字列が管理対象システム文字列に移行されていることを確認してください。
  • 単純なサンプルが機能する場合は、問題を複製するか、問題がなくなるまでアプリケーションから削除するまで、サンプルに追加する必要があります。
  • 0

    私はそれがかなり遅いと知っていますが、私は同じ問題があったのでこの質問を見つけました。

    私が働いている別のプロジェクト(私のものではない)を見ると、問題はファイルopencv_ts248d.libから発生しています。あなたはdepencenciesから削除場合は、それが正常に動作します(私は、なぜ分からない問題は、それに属している機能であると思います)ので、あなたは、次のようなものがあるでしょう:

    opencv_calib3d248d.lib 
    opencv_contrib248d.lib 
    opencv_core248d.lib 
    opencv_features2d248d.lib 
    opencv_flann248d.lib 
    opencv_gpu248d.lib 
    opencv_highgui248d.lib 
    opencv_imgproc248d.lib 
    opencv_legacy248d.lib 
    opencv_ml248d.lib 
    opencv_nonfree248d.lib 
    opencv_objdetect248d.lib 
    opencv_ocl248d.lib 
    opencv_photo248d.lib 
    opencv_stitching248d.lib 
    opencv_superres248d.lib 
    opencv_video248d.lib 
    opencv_videostab248d.lib 
    

    (私は問題をもたらすものを除いて、私は必要なものに集中することなく、それらすべてを含めています)

    が、それはあなた

    お役に立てば幸いです
    関連する問題