2012-03-13 11 views
1

私のC++アプリケーションに問題があります。それはMicrosoft Visual Studio 2008の32ビットPCで開発されましたが、今は64ビットPCで実行しようとしています。C++ 64bit、変数が見つかりません

私の32ビットPCではうまく動作します。 64bit PC上では、Visual Studioはコンパイルに問題はありませんが、実行時に間違った結果が出ます。 そして、私はなぜうんざりしています。

このコードでは、tipe "dag"の変数を定義します。これは直接非循環グラフの構造体です。ソフトウェアをデバッグすることで、私は後に、ソフトウェアがそれにデータを挿入することができない、私はそれを宣言したものの、ことに気づいて、デバッガは言う:

CXX0017: Error: symbol "dags" not found 

は、ここに私のコードです:

Dag<int64_t>* dags = new Dag<int64_t>(); 
    dags = getDagsFromRequest2(request, dags); 

私がgetDagsFromRequest2()関数内のフローに従えば、データ変数がデータでいっぱいであることがわかります。「クイックウォッチ」では、その内部に2342個のノードが表示されます。しかし、私がgetDagsFromRequest2()関数からコードのこの部分に戻ってくると、デバッガは "CXX0017:Error:symbol"というダグを "見つけられません"と言います。どのように可能ですか?

また、このスクリーンショットを私のVisual Studioデバッグセットから見ることができます。

Debug screenshot

何が問題なのだろうか?

どうもありがとう

+0

私はそれがアプリケーションの動作に影響を与えないデバッグ(多分リリースバージョンのため)の問題だと思う。 –

+0

メモリリークの可能性があります。最初にポインタをメモリに割り当ててから、ポインタを上書きして他のメモリを指すようにします。 –

+0

@ DavideChicco.itいいえ、デバッグする必要があります。しかし、ビルドモードには2つのオプションしかないはずです - リリースとデバッグ(私はDebug-x64を見たことがありません)。また、あなたのコードが –

答えて

3

考慮すべきいくつかの可能性があります。

  1. 実行リリースでビルドしますが。デバッグビルドに切り替えます。
  2. 最適化を有効にしたデバッグビルドを使用するか、デバッグ情報を無効にします。最適化を無効にし、デバッグ情報を有効にします(関連する設定については、別のプロジェクトを参照してください)。
  3. ある種の壊れたビルド。ソリューション全体をクリーンにして再構築します。
  4. メモリ破損により、デバッガが変数を表示できません。 Valgrindのようなツールにメモリの問題がないことを確認してください。
  5. VSのバグ。 VS2010用のThis reportは、類似の特性を持つ既知のバグを示唆しているようです。 VS2008のすべてのパッチと修正プログラムがインストールされていることを確認してください。
+0

Thanx Uesp。 1:ちょうど試して、それは動作しません。 2:どうですか? 3:私はきれいにして再構築しましたが、動作しません。 4:Valgrindはどうすれば私を助けることができますか? 5:実際には、それは... –

+0

私はこれがバグであることに私のお金を入れていたが、これは(C + +とC#の両方で)遭遇したいくつかの機会があった – Necrolis

+0

あなたがProject-Properties C/C++のDebug64ビルドで、すべての最適化が最小限(/ Od)であることを再確認してください。それがメモリの破損に起因する場合、Valgrindはそれを検出することができるかもしれません。別のオプションは、デバッグ出力をコンソールまたはファイルに記録し、いくつかのprintf()(または同様の)ステートメントを使用することです。それがうまくいく場合、問題はほぼ確実にVSです。 – uesp

1

変数のDAGは、あなたのコードのコンパイルと定義されます。表示されるエラーは、単にデバッガに関連しています。私はそれがリリースモードでアプリケーションを実行することによって引き起こされると推測していますが、時には紛らわしくて間違った時計値を引き起こします。モードをデバッグに変更してみてください(ドロップダウンからビルドモードを選択できます)。

EDIT:あなたがデバッグモードで実行していると言うように、私の次の推測では、この動作はスタックの破損によって引き起こされる可能性があります。そのような場合は、valgrindを使用して検出してください。それを開始するにはしばらく時間がかかるかもしれませんが、それは価値があり、メモリの破損があるかどうかを検出します。

+0

Thanx Izomorphiusでコンパイルされているにもかかわらず、これはデバッガの問題ですが、Debug-x64モードです。 –

+0

私はあなたの問題になるかもしれないことについて別のアイデアを追加しました。私は、もっと文脈がなければ、もっと多くのオプションを与えることはできないのではないかと恐れている。 –

関連する問題