Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
ВнизInvalid pointer operation Найти похожие ветки
← →
sergnnn (2007-09-26 14:20) [0]Уже голову сломал. Что это может быть?
Внутри простенького собственного класса, есть TStringList, который я создаю в Create своего класса. А потом хочу в одном месте после работы очистить этот лист, делаю StringList.Clear - получаю ошибку Invalid pointer operation.
Для теста заменил очищение на ShowMessage(StringList.GetText) - все ок, показывает данные.
Куда мне копать?
← →
DVM © (2007-09-26 14:22) [1]
> Куда мне копать?
код давай
← →
Ega23 © (2007-09-26 14:23) [2]Код покажи
← →
sergnnn (2007-09-26 14:37) [3]Кода уйма. И вроде ничего там нет страшного.
Ещё пример, исправил очистку на
StringList.Free;
StringList := TStringList.Create;
опять ошибка.
Заменил на создание нового, без уничтожения старого
StringList := TStringList.Create;
Все ок. Вообще, из-за чего это может происходить?
← →
DVM © (2007-09-26 14:41) [4]
> Вообще, из-за чего это может происходить?
Из-за ошибки в 17 строке. Мы долго гадать будем?
Если там кода уйма, то повыкинь лишнее или создай тестовый пример, в котором проявляется ошибка.
← →
Virgo_Style © (2007-09-26 14:42) [5]sergnnn (26.09.07 14:37) [3]
StringList.Free;
StringList := TStringList.Create;
опять ошибка.
Где-то есть ссылка, которая становится битой?
← →
Сергей М. © (2007-09-26 14:43) [6]В программе используется передяча строк между exe и dll ?
← →
sergnnn (2007-09-26 14:45) [7]Да, самое главное сказать пожалуй забыл этот TStringList передается в dll.
dll использует ShareMem.
← →
Сергей М. © (2007-09-26 14:48) [8]
> dll использует ShareMem
Этот же ShareMem в такорй ситуации обязан использовать и exe.
Условие это тобой соблюдено ?
← →
clickmaker © (2007-09-26 14:49) [9]
> dll использует ShareMem
a exe?
← →
Сергей М. © (2007-09-26 14:51) [10]Подозреваю к тому же, что ShareMem указан не там, где ему положено быть указанным.
← →
sergnnn (2007-09-26 14:55) [11]Да, похоже я про ShareMem в приложении забыл. Просто было дело думал обойдусь без TStringList при передаче в dll и убрал все ссылки на ShareMem, а все стринги при передаче заменил на WideString.
А сейчас в случае с TStringList не удастся избежать использования ShareMem, ой как не хочется дополнительную библиотеку (D7)?
Можно ли использовать вместо TStringList при передаче обычный массив .. array of WideString, дабы измежать ShareMem или есть другое решение?
← →
Германн © (2007-09-26 14:58) [12]
> или есть другое решение?
>
PChar ещё никто не отменял.
← →
Сергей М. © (2007-09-26 15:00) [13]
> ой как не хочется дополнительную библиотеку
А как у тебя обстоят дела с использованием рантайм-пакетов при сборке exe и dll ?
> Можно ли использовать вместо TStringList при передаче обычный
> массив
Все зависит от того, что будет твориться в dll с этим переданным массивом и кто будет ответственен за уничтожение массива.
← →
DVM © (2007-09-26 15:05) [14]
> Можно ли использовать вместо TStringList при передаче обычный
> массив
можно конечно - передавай PChar с разделителями, скажем нулевыми симоволами + длину.
← →
Reindeer Moss Eater © (2007-09-26 15:08) [15]передавать Text стринглиста как PChar
← →
Anatoly Podgoretsky © (2007-09-26 15:19) [16]Это у тебя только начало, дальше наткнешься, что в dll своя RTTI
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c