2009-10-07 19 views
0

我只是在獲取垃圾值。調試器顯示正確的值很麻煩。但它的印刷奇怪的東西絕對...C++操作符超載時的垃圾值

這第一部分是好的。基本上,它只是把我帶到我的問題。我有我需要在h.hashtable [hashIndex]數組中打印內容。

ostream& operator<<(ostream& out, const hashmap& h) 
{ 
     const char *getSymbol = NULL; 
     for (int hashIndex = 0; hashIndex < maxSize; hashIndex++) 
     { 
      getSymbol = h.hashTable[hashIndex].getSymbol(); 
      if (getSymbol) // Find the one I added. 
      { 
       h.hashTable->display(out); 
        return out << h.hashTable[hashIndex]; 
      } 
     } 
     return out; 
} 
+0

據我所知,沒有在標準庫中沒有HashMap的 - 有一個hashmap當然,但它被稱爲unordered_map。那麼你的hashmap從哪裏來 - 什麼庫/編譯器/版本? – Steve314 2009-10-07 01:19:29

+0

我將它定義爲一個類對象.. – user40120 2009-10-07 01:24:16

+0

沒關係哈希映射,它是無關緊要的。看看股票。既可以向我們展示課程,也可以簡化和測試,簡化和測試,直到問題停止,然後您將看到它是什麼。 – Beta 2009-10-07 01:28:16

回答

5

確保流被設置爲十進制

out << dec << s.m_sharePrice; 

打印(m_sharePrice是一個非指針類型,對吧?)

+0

這實際上是答案。它的驚人之處在於如何在十二月份感受到我的輸出......調試的主要線索表明它是正確的結果;這意味着這是一個IO問題 – user40120 2009-10-07 01:35:18

1

是行的值:

getSymbol = h.hashTable[hashIndex].getSymbol(); 

很好,但後來廢話?

你可能會遇到這樣的情況:你在一個匿名變量裏面有一個const char *的東西,當這行完成時它會被刪除。

+0

發現,並罰款後 – user40120 2009-10-07 01:10:07

+0

它是奇怪的。調試器在你描述的點上顯示正確的值。但它不打印調試器顯示的內容。 – user40120 2009-10-07 01:11:11

+1

我認爲Calyth建議由getSymbol返回的指針可能指向getSymbol函數內的變量(或者它調用的某個變量),getSymbol退出時不再有效。調試器正在看到該內存中的數據,但稍後的函數調用(如顯示方法)正在重用該內存並覆蓋以前的內容,因此指針在輸出完成時指向垃圾。 IOW,getSymbol是一個「搖擺指針」。由於調用堆棧的工作方式,這類問題很可能與懸掛指針有關。 – Steve314 2009-10-07 01:34:24