У меня странная проблема с куском кода (он не написан мной, я все еще пытаюсь понять)
template<typename T>
T &
ThreadLocalStorage<T>::instance () const
{
T *pValue = static_cast<T *>(TlsGetValue(m_index));
auto x = GetLastError();
if (pValue == 0) {
int size = sizeof(T);
pValue = new T();
TlsSetValue(m_index, pValue);
}
return *pValue;
}
Проблема в том, что после выделения памяти для pValue = new T();
программа просто завершает работу, не показывая ни одной ошибки, прерывания или повреждения кучи. Я попытался выделить память отдельно с помощью
void *ptr = (T*)malloc(sizeof(T));
pValue = new(ptr) T;
, и это sh на mallo c, locks.cpp
на функции
extern "C" void __cdecl __acrt_lock(_In_ __acrt_lock_id _Lock)
{
EnterCriticalSection(&__acrt_lock_table[_Lock]);
}
Кажется, что __acrt_lock_table
переменная NULL, ничего в памяти, и я не могу go далее в EnterCriticalSection
, похоже, у меня есть две ссылки на эту функцию. Как узнать, в чем причина проблемы и каково ее решение?