[MSVC 2010] Runtime library
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 26.05.11 06:48
Оценка:
Минимальная конфигурация для повторения ошибки.

Есть dll с одной экспортируемой функцией.

.h
__declspec(dllexport) void dll_func(void* vec);


.cpp

#include <vector>

void dll_func(void* vec)
{
    std::vector<int>* v = (std::vector<int>*)vec;
    std::vector<int>& vv = *v;
    vv.resize(100);
}



Есть exe, который вызывает функцию:

#include <vector>

void f()
{
    std::vector<int> v;
    dll_func(&v);
}

int _tmain(int argc, _TCHAR* argv[])
{
    f();
    return 0;
}



Линковка exe и dll статическая.

Ошибка:
Если в exe и dll выставить Runtime library как Multi-threaded Debug (/MTd), то приложение падает в деструкторе std::vector после выхода из функции f(), находящейся в exe. Сообщение в логе "HEAP[dll_test.exe]:

Invalid address specified to RtlValidateHeap( 002B0000, 00CF1328 )
Windows has triggered a breakpoint in dll_test.exe.

This may be due to a corruption of the heap, which indicates a bug in dll_test.exe or any of the DLLs it has loaded.


Если же поставить Multi-threaded Debug DLL (/MDd) (на обоих проектах!), то всё нормально.
С релизными RTL та же проблема.

Что это? Разные менеджеры памяти используются?

P.S. Менять код не предлагать. Он не мой, а большой сторонней библиотеки. И используется в ней повсеместно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.