C++. Проблема с передачей векторов

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
dima
Житель
Сообщения: 690
Зарегистрирован: 19 фев 2003, 19:26
Откуда: Хабаровск->Toronto

C++. Проблема с передачей векторов

Сообщение dima »

Win XP. VS 6. C++

1. есть библиотека Lib1 из которой экспортируется класс C1 с методом

Код: Выделить всё

void F1(vector<CMyObject*>&)
2. есть MFC-extention M1 в которой импементирован диалог D1. В диалоге определен член

Код: Выделить всё

vector<CMyObject*> m_vObjects;
3. есть Dialog-based аппликация (use MFC as Shared DLL), которая создает об1ект С1 (из библиотеки Lib1) и передает указатель на него в диалог D1. В OnInitDialog() вызывается F1, для заполнения вектора (копируются только указатели на об1екты. Время жизни CMyObjects дольше чем диалога).


Проблема - деструктор диалога вызывает деструктор вектора и происходит crash если хоть один указатель был добавлен в вектор


Все компоненты скомпилорованы "Multithreaded DLL".
Был warning линкера, поиска в интернете, вставил MSVCRT.lib в "Ignore Libraries" - warning пропал, crash остался.

Где искать ?
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Re: C++. Проблема с передачей векторов

Сообщение ajkj3em »

malloc в dll оперирует с heap'ом отличным от heap'a основоного приложения. cм HeapCreate, GetProcessHeap, etc

там как-то очень просто всё это решалось .. можно заставить CRT
DLL'a использовать основной heap. надо протрейсить до уровня
malloc'a и посмотреть где и как собсно heap создается
Аватара пользователя
aldep
Маньяк
Сообщения: 1593
Зарегистрирован: 18 фев 2003, 08:06
Откуда: Toronto
Контактная информация:

Сообщение aldep »

Аватара пользователя
aldep
Маньяк
Сообщения: 1593
Зарегистрирован: 18 фев 2003, 08:06
Откуда: Toronto
Контактная информация:

Re: C++. Проблема с передачей векторов

Сообщение aldep »

ajkj2em писал(а):malloc в dll оперирует с heap'ом отличным от heap'a основоного приложения. cм HeapCreate, GetProcessHeap, etc
опередил :)
Аватара пользователя
dima
Житель
Сообщения: 690
Зарегистрирован: 19 фев 2003, 19:26
Откуда: Хабаровск->Toronto

Сообщение dima »

спасибо.
vg
Маньяк
Сообщения: 2803
Зарегистрирован: 29 май 2003, 22:29
Откуда: Магадан - Миссиссага

Сообщение vg »

Не читал подробно твой пост. Не думаю, что у тебя это (с твоим опытом программера), но всё же .... всё может быть гораздо прозаичнее.

Типичная ошибка при использовании dll (неважно класов или неклассов) - это когда память выделяется в DLL, а освобождается "наруже".

Типа просто проверь. :wink:
Ответить