したがって、VS 2008でC++で組み込み環境(ARMプロセッサ)を使用しています。私は私の会社のために中規模のプロジェクトを作りました。それはこれまでWindowsアプリケーションでした。私はコンソールアプリケーションに変更するように頼まれました。私はそれをWindowsアプリケーションにする本当の理由はありませんでした...最初は、私はVSで適切な設定を変更してから再構築しました。それはうまく構築されましたが、私はプログラムを実行しようとするたびに、タイトルで引用された例外を得ました。私は、コンソールアプリケーションに切り替える前に、プログラムが完全に機能していることを強調したいと思います。私はソリューション全体を完全にきれいにして再構築しました。静的STLセットに最初に挿入すると、処理されない例外0xC0000005が発生する:アクセス違反がスローされる
私はこの設定が手動で設定を変更するだけの問題だと思ったので、コンソールアプリケーションに設定された新しいプロジェクトを作成し、すべてのソース/その他の関連プロジェクトをそのプロジェクトに接続しました。これは、ソリューションのさまざまなプロジェクトがすべて正しくリンクされていれば、うまく構築されますが、同じエラーが発生します。
場合、プログラムがクラッシュすると、それは次のような方法でINSERTコマンドで停止:
template<class Elem>
Node<Elem>* Node<Elem>::addChild(const Elem& value)
{
Node<Elem>* newNode = new Node(value);
newNode->m_pParentNode = this;
m_childList.push_back(newNode);
m_sNodeSet.insert(newNode);
return newNode;
}
m_sNodeSetは、ツリーの各ノードは一意でなければならないルールを適用することがあります。エラーは、このaddChildメソッドが初めて呼び出されたときに発生します。現時点では、m_sNodeSetはサイズがゼロであり、いくつかのメモリを割り当てる必要があります。しかし、スローされた例外は、Bad AllocではなくAccess Violationです。私はm_sNodeSet.get_allocator()を追加しようとしました。insertステートメントの前にallocate(5)を実行して、何かを行うかどうかを確認しましたが、同じ例外がスローされました。 m_sNodeSetは静的メンバー変数で、違いがある場合はそれです。
このNodeクラスは、私が作成したカスタムツリーオブジェクトです。私は何週間もこのツリープロジェクトで何も変更していないし、うまくいきました。このツリープロジェクトでは、これまでには見たことが無く完璧に実行していることは何も投げていないと思うので、ツリープロジェクト自体に問題はないと思います。
これは、ライブラリの境界を越えてSTLコンテナにアクセスする際の問題ではないことは確かです。このエラーは、単一の静的ライブラリの操作内で発生しています。
この作業を適切に行うために私のソリューションで変更が必要な設定が必要なような気がします。ソリューションには複数のプロジェクトがあり、1つはDLL、1つはLIB、もう1つはEXEです。ツリーは4番目のプロジェクトですが、それは単に適切なプロジェクトの「追加のインクルード」に入れられます。 EXEをコンソールアプリケーションとして実行するように変更しました。
ここに問題が発生している可能性があるすべてのインクがある場合は、非常に感謝します。
機能にステップインしましたか? –
コードは別のファイルで他の静的構造から呼び出される可能性がありますか? m_sNodeSetが初期化される前に? –
これは役立ちますか?[静的初期化の失敗とは何ですか?](http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.14) –