Страница 1 из 1

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

Добавлено: 27 окт 2006, 09:29
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 остался.

Где искать ?

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

Добавлено: 27 окт 2006, 10:12
ajkj3em
malloc в dll оперирует с heap'ом отличным от heap'a основоного приложения. cм HeapCreate, GetProcessHeap, etc

там как-то очень просто всё это решалось .. можно заставить CRT
DLL'a использовать основной heap. надо протрейсить до уровня
malloc'a и посмотреть где и как собсно heap создается

Добавлено: 27 окт 2006, 10:33
aldep

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

Добавлено: 27 окт 2006, 10:34
aldep
ajkj2em писал(а):malloc в dll оперирует с heap'ом отличным от heap'a основоного приложения. cм HeapCreate, GetProcessHeap, etc
опередил :)

Добавлено: 27 окт 2006, 11:08
dima
спасибо.

Добавлено: 27 окт 2006, 17:29
vg
Не читал подробно твой пост. Не думаю, что у тебя это (с твоим опытом программера), но всё же .... всё может быть гораздо прозаичнее.

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

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