Выход из программы после попытки выделить память без ошибок - PullRequest
0 голосов
/ 24 апреля 2020

У меня странная проблема с куском кода (он не написан мной, я все еще пытаюсь понять)

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, похоже, у меня есть две ссылки на эту функцию. Как узнать, в чем причина проблемы и каково ее решение?

...