У меня есть исключение - это dll, который я использую при инициализации статической локальной переменной экземпляром класса. Исключение возникает при возврате из конструктора класса.C++ статическая локальная инициализация переменных в dll вызывает _CrtIsValidHeapPointer exception
Исключением я получаю в выпуске является:
ConsoleApplication1.exe: 0xC0000005: Access чтение нарушения расположение 0x00000000BA3529A2.
и отладки я получаю отладочный утверждение:
Debug Assertion Failed!
Программа: E: \ Sandbox \ ConsoleApplication1 \ x64 \ Debug \ ConsoleApplication1.exe
Файл: F: \ дд \ vctools \ элт \ crtw32 \ разное \ dbgheap.c
Line: 1516Expression : _CrtIsValidHeapPointer (pUserData)
Это функция, завершившихся неудачей (часть библиотеки CImg которая отлично!):
static const CImg<Tuchar>& jet_LUT256() {
static CImg<Tuchar> colormap; // <--- static local variable decleration
// exception here. after returnning from the CImg constructor :-(
cimg::mutex(8);
if (!colormap) {
colormap.assign(1,4,1,3,0);
colormap[2] = colormap[3] = colormap[5] = colormap[6] = colormap[8] = colormap[9] = 255;
colormap.resize(1,256,1,3,3);
}
cimg::mutex(8,0);
return colormap;
}
Когда проект работал как exe, все работало нормально. Проблема началась, когда я сделал ее dll и использовал ее в другом exe.
Опубликовать код? – noobProgrammer
У экземпляров класса не может быть «статических локальных» переменных. Вы имеете в виду переменную static * member * или конструктор имеет статическую локальную переменную? Возможно, вы могли бы показать код для конструктора? – molbdnilo
Здесь нет никаких вопросов. Вы спрашиваете, что означают эти сообщения? –