2011-05-26 74 views
0

可能重複:
Undefined/Uninitialized default values in a class非零默認值

我有C++中的類,它是創建和銷燬相當頻繁。爲了調試,我添加了一個bool mDebug給這個類,我想用#ifdef打開。但是,我發現即使在未定義ifdef時也會顯示與調試變量相關的消息。當我在構造函數中拋出值時,我發現它具有隨機值 - 35,68等。所以我假設存在某種內存泄漏,並且該類正在分配已使用的內存。但是,我已經對它進行了純化,並沒有顯示在那個時候讀取的未初始化的內存或任何超出界限的寫入。 valgrind也沒有太大的幫助。由於各種原因,gdb在這段代碼上效果不佳。我可以轉儲變量的地址,但有其他想法嗎?

感謝

+4

我認爲這將需要一些示例代碼。具體來說:你如何使用'ifdef'?你的構造函數是如何設置的? – 2011-05-26 16:39:32

+1

不要讓我們猜測,發佈一些代碼。 – NPE 2011-05-26 16:40:39

+0

爲什麼不直接使用DEBUG標誌而不是將該功能委託給類變量?這聽起來就像那個電話遊戲'中國語言'(?) – freitass 2011-05-26 17:15:04

回答

1

我假設你的「bool mDebug」添加到類是靜態成員,因爲這會(自動)初始化爲零。所以,我認爲它必須是一個「常規」數據成員。

這意味着你根本就沒有設置初始值與構造體(無論是哪個,你也想包在#ifdef「基地/成員初始化列表」或明確的,因爲你的成員定義被包裝在一個#ifdef )。

默認情況下,成員未設置爲零(您必須明確地執行此操作)。除非出現真正奇怪的事情,否則我懷疑這是內存泄漏/錯誤。

+0

我認爲常規數據成員也初始化爲0。那麼我的錯誤。其他成員似乎正在初始化爲0,但也許這只是運氣。 – 2011-05-26 21:11:22