我正在研究一些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