Народ тут такая ситуация. Если отбросить лишнее, то в dll есть 2 функции, из которых одна используется постоянно, а другая только если объем памяти не кратен некоторой величине. Вот если такое происходит то эта вторая функция увеличивает объем до кратности. Например:
| Код | void F2(unsigned char **data, unsigned int *size, unsigned int size_blk) { if((*size)%size_blk>0) { unsigned int n; n=(*size)/size_blk; n++; delete (*data); (*data)=new unsigned char[n]; (*size)=n; } }
|
| Код | void F1(unsigned char **data, unsigned int *size, unsigned int size_blk) { //что-то до F2(data, size, size_blk); //что-то после }
|
Как я уже говорил все в dll подключаю LoadLibrary и GetProcAddress. Проблема в следующем: если все кратно и F2 не вызывается то все замечательно, но если не кратно то вызывается F2 и вываливается исключение. Оно говорит что не туда пишет. Я уже несколько раз переписывал по разному F2 чтоб исключить выход за пределы памяти. У меня возникает подозрение в том что в F2 нельзя так с delete и new(указатель туда передается из exe). Поделитесь мыслями. Спасибо.
Добавлено через 12 минут и 58 секунд Да, видимо только от delete и new это зависит. Удалил все циклы только изменение размеров памяти и все. В dll не работает F2 а в exe все нормально. Опасения подтверждаются. |