Я работаю над кодом C ++ и у меня возникли некоторые проблемы с функцией, описанной ниже. Раньше я не пользовался большим количеством C ++, по крайней мере, долгое время, и поэтому я стараюсь учиться по мере продвижения вперед в значительной степени. Win32api тоже мало помогает с фактором путаницы ...
Функция успешно вызывается дважды, после чего происходит сбой при вызове на более поздней стадии, когда она вызывается в приложении.
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];
происходит сбой, последний маркер отображается как «Маркер А». Я использовал delete[]
на указателе ниже, но безрезультатно. Я знаю, что nDn
является значением, потому что я печатаю это в журнал сообщений, используя _itow_s
для отладки. Я также знаю, что dnPtrstr
является PTSTR.
Я пытался использовать malloc
также с free()
в старом стиле C, но это не улучшило ситуацию.