Я получаю нарушение доступа, которое я не могу понять при попытке сравнить с строками BSTR в функции C++. По какой-то причине код работает обычно большую часть времени. Но иногда, казалось бы, случайным образом, это исключает. Это то, что я делаю:Нарушение прав доступа на CompStr (BSTR, BSTR) после получения строки?
BSTR myString; // also tried this with a CComBSTR, same result, but less often it seemed
pSomeObject->GetString(&myString);
if (!CompStr(someOtherString, myString))
{
//do stuff
}
SomeObject :: GetString является:
STDMETHODIMP SomeObject::GetString(BSTR* outStr)
{
if (!outStr) return E_POINTER;
*outStr = ::SysAllocString(m_memberString);
return S_OK;
}
Я получаю нарушение прав доступа в CompStr, который:
inline bool CompStr(BSTR str1, BSTR str2)
{
UINT len1 = ::SysStringLen(str1);
UINT len2 = ::SysStringLen(str2); // this is where I'm getting the access violation
return CompStr(str1, len1, str2, len2);
}
Любые идеи о том, что я делаю неправильно или почему это неудачно?
Вы уверены, что и '' str1' и str2' оба были выделены с 'SysAllocString'? –
Я уверен, что они есть. Я знаю, что моя строка (str2) инициализируется, но я буду копать глубже в другие пути кода, чтобы увидеть, не инициализируется ли str1. – climbak
В отладчике проверьте значение 'str2'. Также может быть неопределенное поведение раньше (например, переполнение буфера), и только когда вы выделяете другую строку, это повреждение появляется. –