Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Вниз

Косяк в BCB5 при использовании stl   Найти похожие ветки 

 
greymouse   (2003-06-29 00:52) [0]

Привет,

Пришлось столкнуться с проблемой. Под заказ написана компонента с
использованием stl"евского vector"а. Проблема в том, что код, работающий в
BCB5 Enterprise отказывается корректно работать в BCB5 Standart. Ошибка
вываливается в memory.stl при попытке копирования свойства компонента из
вызваной формы в вызвавший его модуль (что-то в духе приведенного примера).
Standart вылетает с A/V, а Enterprise корректно все отрабатывает. В рамках
одной формы Standart так же работает как надо. Никто не сталкивался с
подобным?

greymouse

PS: прошу прощение за постинг о bcb, но возможно подобная проблема была у кого-то и с delphi


 
Suntechnic   (2003-06-29 06:55) [1]

Трудно давать советы по столь жидкому описанию и не видя кода, но... если где-нибудь в коде происходит передача (или возврат) вектора в модуль по значению или же происходит модификация переданного вектора (если он передан по ссылке или указателю) где-либо в самом модуле, то это потенциальный источник трудноотлавливаемых ошибок. Проверьте свой код на соответсвие тому, что я написал и если найдёте хоть одно такое место, меняйте логику. Корректно работать это никогда не будет.


 
greymouse   (2003-06-29 11:24) [2]

да, обвал происходит при передаче вектора. Однако интересно чем таким обладает enterprise версия билдера, чего нет в стандарт поставке и что мешает корректно отрабатывать код. "Чего нет" приминительно к данной ситуации разумеется.

А пример я действительно забыл запостить. Если он поможет, то вот он:

int btLocal;

Form2 = new TForm2(Application);
try
{
btLocal = Form2->ShowModal();
TMyComponentProperty * pcs = new TMyComponentProperty(Form2->MyComponent->MyComponentProperty);
}
catch(...)
{
Form2->Free();
}

на объявлении pcs и огребаю a/v


 
Suntechnic   (2003-06-29 20:02) [3]

>greymouse (29.06.03 11:24)
Ничем особенным версия Enterprise не обладает. А корректно обрабатывать мешает тот факт, что неизвсетно какая версия (статическая или DLL) run-time библиотеки C/C++ используется в приложении и в модуле. Чтобы избежать подобных проблем, при работе с модулями надо усвоить одно простое правило: где память размещается, там она и должна уничтожаться.

Если говорить о конкретном коде, то сказать однозначно, нарушает ли он данное правило, нельзя потому как не видно что есть Form2->MyComponent->MyComponentProperty (т.е. понятно, что это вектор, только непонятно из каких элементов он состоит)... но очевидно другое. При передачи вектора по значению будет вызван копи-конструктор (если только MyComponentProperty не указатель и не ссылка на вектор), который создаст копию елементов вектора (т.е. размещение памяти в одном модуле). А вот уничтожение этой копии будет происходить при выходе из области видимости конструктора TMyComponentProperty т.е. в другом модуле. Вот в этом, судя повсему и есть загвоздка.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
14-44861
Knight
2003-06-26 17:56
2003.07.14
Мыша...


14-44807
kaif
2003-06-12 23:34
2003.07.14
---|Ветка была без названия|---


3-44560
n1tro
2003-06-19 18:14
2003.07.14
Как отобразить запрос ч/з TDBGird


1-44731
Пубертанец
2003-07-01 09:19
2003.07.14
Как обратиться к свойству, зная его название?


1-44743
JFX
2003-07-01 13:55
2003.07.14
Вставка картинок в компоненты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский