您能給出重現(xiàn)這個(gè)問題的例子嗎?聽起來感覺不太可能出現(xiàn)這種問題啊。
@ouyang
我開始也這么想, 后來找到原因后測試了好多次,發(fā)現(xiàn)每次地址都被改, 代碼不方便都貼出來,因?yàn)楣驹谟?我貼出部分來,大家看一看.
struct gameworld
{
bool bused; // 該服務(wù)器數(shù)據(jù)是否有效
CString worldname; // 服務(wù)器名
CString ChatServerUrl; // 游戲聊天服務(wù)器URL
CString StatusServerUrl; // 檢查服務(wù)器狀態(tài)的URL
int WorldOrder; // 服務(wù)器的序列
bool bstarted; // 該服務(wù)器是否啟動(dòng)
CString LoginServerURL1; // 登錄服務(wù)器地址
CString LoginServerURL2;
CString QueueName1;
CString QueueName2;
CString QueueUrl1;
CString QueueUrl2;
CString LoginServerURL;
};
struct gameear
{
CString AuthServer;
CString PatchServer;
CString LauncherConfigurationServer;
gameworld pgameworld[20];
CString PatcherServerport;
CString gameearname;
int igameworldsize;
};
std::vector<pServerNode> m_pServerNodeList;
gameear agameear;
線程修改 agameear變量后, m_pServerNodeList的地址就錯(cuò)了. 線程并沒有改m_pServerNodeList,
而把改成這樣就ok了:
gameear agameear;
std::vector<pServerNode> m_pServerNodeList;
凡是有直接或間接定義復(fù)制構(gòu)造函數(shù)和operator=的類都不能那么用。
比較疑惑,CString的內(nèi)部實(shí)現(xiàn)應(yīng)該是有一個(gè)char*的成員變量,如果“寫入了大量的數(shù)據(jù)”的話會在堆上重新分配內(nèi)存,應(yīng)該不會影響他后面的變量的內(nèi)存吧??怎么會出現(xiàn)“CString類的地址覆蓋了,它前面變量的地址”呢?