2012-02-13 146 views
-1

在gdb中,我得到一個「不能訪問內存在地址[]」目前,該程序運行良好,但我很困惑,爲什麼我不能正確訪問它。無法訪問內存地址C++

http://hastebin.com/wulomoqimu - main.cpp中

http://hastebin.com/hahosuruhe - player.h

這些,我相信培訓相關文件。

*(playerNames+i) = (players+i) -> name; 
    *(playerCards+i) = (players+i) -> hand; 
    *(playerScores+i) = (players+i) -> score; 

還有一些線我不確定。謝謝你的幫助。

+1

這是不夠的上下文來幫助你。你有沒有試過在調試器中把它拉起來並環顧四周?這些指針的值和「i」的值是什麼?另外,任何你不使用'playerNames [i] = players [i] .name'作爲語法的理由? – templatetypedef 2012-02-13 03:34:32

回答

4
playerNames = new string * [numPlayers]; 

playerNames指向一個字符串指針數組。這意味着您已將內存分配給可指向字符串對象的指針。該數組現在填充了一些垃圾地址。

*(playerNames+i) = (players+i) -> name; 

在這裏,你用了陣列指向任何有效的字符串對象的地址解引用。在解引用之前,您必須使每個數組索引指向有效的內存地址。

for(int i=0; i<numPlayers; ++i) 
    playerNames[i] = new string(); 

現在數組中填充了有效的字符串對象地址。

+2

最近的回覆,但我忘記標記你的答案。謝謝! – 2013-04-04 20:18:10