Если не трудно помогите разобраться.
Происходит следующее. Если в СОМ объекте выделить память а в клиенте ее освобождать, то отладчик вываливается при проверке кучи в момент освобождения памяти.
аналог кода такой:
в СОМ:
fn([out, retval] long *pVal)
{
*pVal=(long) new BYTE[100]
return OK;
}
В клиенте:
BYTE *pData=fn();
delete []pData;
на синтаксис внимание не обращайте, используюся wrapped классы для позднего связывания.
сервер подключается как LOCAL_SERVER
О причине я догадываюсь, но можно ли от этого избавиться незнаю.
Проблема с выделением памяти в куче
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Но тем не менее в релизе проблемы не вылазят, и утечек памяти не видно. К тому же требуется вызов конструктора класса после выделения памяти. Я конечно понимаю, что проблему можно решить и по другому, что уже сделано, но интерес остался
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Объект в уже готовом буфере можно создать с помощью placement new.Andrey писал(а):Но тем не менее в релизе проблемы не вылазят, и утечек памяти не видно. К тому же требуется вызов конструктора класса после выделения памяти. Я конечно понимаю, что проблему можно решить и по другому, что уже сделано, но интерес остался
Делается это так :
new(адрес_объекта)тип_объекта(параметры конструктора);
Для разрушения объекта тогда надо явно вызывать деструктор
адрес_объекта->~тип_объекта();
И освобождать память явно (в данном случае через IMalloc).
В Release - варианте проект не работает, а делает вид что работает. Надо переписать.
2B OR NOT(2B) = FF