我正在研究一些C++代碼,並在下面描述的函數中遇到一些問題。我之前並沒有使用過多的C++,至少不是很久以前,所以我在很大程度上嘗試學習。 win32api對混淆因素沒有多大幫助...使用'new'在C++中動態分配內存?
該函數被成功調用兩次,之後在應用程序中調用該函數時在稍後調用失敗時失敗。
PTSTR getDomainFromDN(PTSTR dnPtstr) {
size_t nDn=wcslen(dnPtstr);
size_t *pnNumCharConverted = new size_t;
wchar_t *szTemp = new wchar_t[10]; // for debugging purposes
_itow_s((int)nDn,szTemp,10,10); // for debugging purposes
AddToMessageLog(EVENTLOG_ERROR_TYPE,szTemp); // for debugging purposes (displays an integer value before failing)
AddToMessageLog(EVENTLOG_ERROR_TYPE,TEXT("Marker A")); // for debugging purposes
char *dn = new char[nDn];
// !!!!!!!!!!!! all goes wrong here, doesn't get to next line, nDn does have a value when it fails (61)
AddToMessageLog(EVENTLOG_ERROR_TYPE,TEXT("Marker B")); // for debugging purposes
wcstombs_s(pnNumCharConverted,dn,nDn+1,dnPtstr,nDn+1);
...more code here...
delete[] dn;
delete pnNumCharConverted;
return result
}
起初我認爲這是一個內存分配的問題或東西,因爲它失敗就行char *dn = new char[nDn];
,表示爲「標記A」的最後一個標記。我用指針delete[]
進一步無效。我知道nDn
是一個值,因爲我用_itow_s
打印出來的消息日誌進行調試。我也知道dnPtrstr
是一個PTSTR。
我嘗試使用malloc
以及free()
在舊的C風格,但這並沒有改善的東西。
一旦你開始擺弄這樣的指針,這很棘手 – 2011-06-09 05:19:11
'size_t * pnNumCharConverted = new size_t;'哦我的。 – 2011-06-09 05:20:23
你正在使用太多'new'。 – Nawaz 2011-06-09 05:23:21