2012-03-13 57 views
1

我的C++應用程序出現問題。它是在Microsoft Visual Studio 2008上的32位電腦上開發的,現在我試圖在64位電腦上運行它。C++ 64位,變量未找到

在我的32位電腦上工作正常;在64位電腦上,Visual Studio不會給出任何編譯問題,但是在執行時會給出錯誤的結果。 而我不知道爲什麼。

在代碼中,我定義了一個變量「dag」,它是一個直接非循環圖的結構。通過調試程序時,我注意到,雖然我宣佈它,後來的軟件是不是能夠在它插入數據,調試器說:

CXX0017: Error: symbol "dags" not found 

這裏是我的代碼:

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

的很奇怪的是,如果我按照getDagsFromRequest2()函數中的流程,我可以清楚地看到dags變量充滿了數據:在「quickwatch」上,它顯示了2342個節點。但是當我從getDagsFromRequest2()函數返回到代碼的這一部分時,調試器會顯示「CXX0017:Error:symbol」dags「找不到」。這怎麼可能?

您還可以從我的Visual Studio調試集中看到此截圖。

Debug screenshot

可能是什麼問題呢?

非常感謝

+0

我認爲這只是調試問題(可能是發佈版本的原因),它不會影響應用程序行爲。 – 2012-03-13 11:26:25

+0

您可能有內存泄漏。首先將內存分配給指針,然後覆蓋指針指向其他內存。 – 2012-03-13 11:36:07

+0

@ DavideChicco.it不,它應該在調試。但我認爲你應該只有兩種選擇構建模式 - 發佈和調試(我從來沒有見過Debug-x64)。此外,這是一個調試器問題,因爲您的代碼編譯 – 2012-03-13 11:36:33

回答

3

有幾個可能性考慮:

  1. 運行在發佈版本。切換到調試版本。
  2. 使用已啓用優化和/或禁用調試信息的Debug版本。禁用優化並啓用調試信息(查看另一個項目中的相關設置)。
  3. 某種腐敗的版本。清理並重建整個解決方案。
  4. 內存損壞,阻止調試器顯示變量。確保像Valgrind這樣的工具不存在內存問題。
  5. 一個VS錯誤。例如,VS2010的This report似乎暗示了一個具有類似特徵的已知bug。確保安裝了VS2008的所有修補程序和修補程序。
+0

Thanx Uesp。 1:剛試過,它不起作用。 2:如何? 3:我已經清理並重建,但不起作用。 4:Valgrind如何幫助我? 5:事實上,它可能是...... – 2012-03-13 14:44:38

+0

我把我的錢這是一個錯誤,出現了一些場合我遇到這個(無論是在C++和C#) – Necrolis 2012-03-13 15:37:28

+0

如果你進入項目的屬性請仔細檢查在C/C++下的Debug64版本中,所有優化都至少關閉(/ Od)。如果這是由於內存損壞,Valgrind可能會檢測到它。另一種選擇是將調試輸出記錄到控制檯或文件並使用幾個printf()(或類似的)語句。如果這工作正常,那麼問題幾乎肯定是VS. – uesp 2012-03-13 15:51:31

1

變量dags定義爲您的代碼編譯。你看到的錯誤只是與調試器相關。我猜測這是由於在發佈模式下運行應用程序而引起的,這種情況有時會引起混淆和錯誤的手錶值。嘗試改變模式進行調試(有一個下拉菜單,您可以從中選擇構建模式)。

編輯:正如你所說你在調試模式下運行,我的下一個猜測是,這種行爲可能是由堆棧損壞造成的。嘗試使用valgrind來檢測是否屬於這種情況。開始使用它可能需要一段時間,但它是值得的,並且會檢測你是否有內存損壞。

+0

Thanx Izomorphius,但我處於Debug-x64模式。 – 2012-03-13 11:35:12

+0

我對可能是您的問題添加了另一個想法。如果沒有更多的背景,我恐怕不能提供更多的選擇。 – 2012-03-13 11:40:20