2015-04-15 2 views
-2

У меня есть исключение - это 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: 1516

Expression : _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.

+3

Опубликовать код? – noobProgrammer

+0

У экземпляров класса не может быть «статических локальных» переменных. Вы имеете в виду переменную static * member * или конструктор имеет статическую локальную переменную? Возможно, вы могли бы показать код для конструктора? – molbdnilo

+0

Здесь нет никаких вопросов. Вы спрашиваете, что означают эти сообщения? –

ответ

0

Решено.

Найдено, что проблема заключалась в том, что я использовал свойство/NOENTRY (большой Ноно!)

(потому что, когда я преобразовал его из ехе в DLL У меня была ошибка линии связи с нерешенностью функцией mainCRTStartup)

удалил/NOENTRY из Properties-> Linker-> Advanced, и ошибка исчезла.

Смежные вопросы