所以我有堆問題的腐敗,並想知道如果它可能與我如何處理一些數組。事實上,在某些時候我有一個像這樣送到我Winproc傳了幾個信息:將一個WCHAR數組作爲LPARAM發送給winproc的正確方法是什麼?
SendMessage(hwnd, LOG_ADD, NULL, (LPARAM)L"Initializing winsock... ");
LOG_ADD被定義爲104內部Winproc傳,當味精== LOG_ADD,會發生以下情況:
case LOG_ADD:
{
pGame->pMessageLog->PutToLog((WCHAR*)lParam);
pGame->pD2DResources->OnRender(pGame->pMessageLog);
有MessageLog :: PutToLog(WCHAR []):
void MessageLog::PutToLog(WCHAR txt[])
{
int strLen=wcslen(txt);
int logLen=wcslen(logHistory);
WCHAR* pWCHAR = txt;
int x=0;
// Counts the number of '\n' into wString and adds that number to nLogLines
for(x=0; x<strLen; x++)
{
if(pWCHAR[x]=='\n')
nLogLines++;
}
pWCHAR = logHistory;
x=0;
while(nLogLines>5)
{
if(pWCHAR[x]=='\n')
nLogLines--;
x++;
}
if(x!=0)
{
for(int y=0; y<logLen-x; y++)
{
pWCHAR[y]=pWCHAR[y+x];
}
}
wcscat (logHistory, txt);
}
這可以解釋腐敗問題嗎?實際上,當我刪除所有SendMessage(hwnd,LOG_ADD ...)行時,編譯器執行「struct hostent * host;」行後,損壞不會在幾行後出現。或「if((host = gethostbyname(server))== NULL)」。
你怎麼知道你有堆損壞? – 2013-03-19 00:49:20
我的程序中斷了,我收到了這條消息。但是,我只是意識到我沒有初始化nLogLines和logHistory。現在我初始化它們,堆問題的腐敗消失了,儘管我還有其他問題。 不過,這是發送一個WCHAR數組作爲LPARAM並將其發送給另一個函數使用的正確方法嗎? – 2013-03-19 00:52:41
@MickaelBergeronNéron - 是的,你正在做的很好。這正是'WM_SETTEXT'所做的。 – shf301 2013-03-19 00:58:59