2011-03-11 59 views
1
typedef struct class { 
    char* CLASS_ID; 
    char* CLASS_NAME; 
} 

什麼會導致這兩個字符串超過代碼30-40無關行的過程中失去自己的價值? (分配給從名爲getString()的函數返回的指針)。字符串結構中的不正確存儲

+0

CLASS_ID和CLASS_NAME的返回值是否仍然是他們應該使用的,如果您在使用對getString()的調用進行初始化後將它們打印出來,它們應該是什麼樣的?如果它們在第二次調用後不正確,那麼你可能在getString()中有問題。讓我知道你找到了什麼,我們可以從那裏去。 – chkdsk 2011-03-11 21:01:56

+0

如果通過閱讀代碼無法解決問題,調試器會告訴您哪些代碼正在寫入內存。 – 2011-03-11 21:06:18

回答

2

也許getString()返回一個指向靜態分配的緩衝區的指針,每次調用它的值時都會覆蓋它的值?

也許你正在溢出數組並破壞你的堆棧或堆?

也許你正在存儲一個指向堆棧上分配的字符串的指針,並且已經超出了範圍?

有了getString()的更多信息或代碼,有人可能會給你一個明確的答案。

+0

當。在不到一分鐘的時間內用相同的答案打敗我。無論如何,我有一個個人規則,任何人都會這樣做,並且與我有同樣的答案是一個明顯的天才,所以+1。 :-) – 2011-03-11 21:02:21

1

那麼,不知道getString()是如何實現的,或者你的任何其他代碼,它可能是任何東西。這是C(使用指針)問題的一部分。

我的第一猜測是,實際上getString()指針返回到內部(static)串,從而每個呼叫抹殺從最後檢索到的值。

如果你真的在使用C++,那麼我強烈建議你放棄這段代碼並改用std :: string。我敢打賭,你的問題神奇地消失了。

0

除了其他的什麼在這裏貼有還,你應該避免像classCLASS_IDCLASS_NAME的名字,因爲他們是#defined在許多圖書館的可能包括在未來和調試了好幾個小時,找出哪些是突然錯。