|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.08.2015, 10:57 | #1 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
Ошибка Access Violation при переделывании из TStrings в динамический массив
Добрый день. Помогите пожалуйста отловить ошибку доступа к памяти. Есть программа клиент-серверная, серверная часть собирает данные кто сидит в расшареных папках на серваке, собирает их динамический массив, далее что бы передать эти данные на компьютер клиента переделывает массив в TStrings и через инди компонет (TCPServer) отправляет клиентской части. В клиентской части массив собирается заново из TStrings и дальше вывод на СтрингГрид.
При ручном запросе данных с сервера все работает хорошо, но стоит сделать что бы данные автоматически обновлялись скажем раз в 1 сек. и когда происходит какое либо подключение к шарам, то тут же выскакивает ошибка. П.С.: Всего передается два массива двумерных у них строки это столбцы, а столбцы это строки (так проще в стринггрид писать да и дело привычки). В TStrings массив переделывается следующим путем: строка массива объединяется по всем полям и запихивается в строку TStrings, а что бы можно было отделить одно поле от другого ставится символ "#". Надеюсь более менее описал ситуацию понятной. =) Код серверной части пока не привожу, думаю дело не в ней. Код клиентской программы: Код:
О_о
Последний раз редактировалось Аватар; 06.08.2015 в 11:02. |
06.08.2015, 10:58 | #2 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
Код:
О_о
Последний раз редактировалось Аватар; 06.08.2015 в 11:02. |
06.08.2015, 11:01 | #3 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
отладчик при ошибке выводит на эту строчку в функции fStringsMatrix
Result[j,i]:=copy(Str,TmpStrI+1,StrI-TmpStrI-1);
О_о
|
06.08.2015, 11:11 | #4 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
TStringList ---> массив ---> TStringList ?
нафига такой онанизм? без преобразования никак? зачем оно ваще? Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
06.08.2015, 11:12 | #5 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Дык бряк поставь в теле функции и смотри при каких значениях индексов исключение произошло
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
06.08.2015, 11:17 | #6 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
Для min@y™
Нет. Масcив -> TStringList -> передача по сети через инди компоненты -> TStringList -> Масcив. Нужно для того что бы с серверной части передать на клиентскую часть (две разные программы), не смог реализовать через Stream, сделал проще у компонента IdTCPServer, есть метод передачи данных через WriteStrings (AThread.Connection.WriteStrings) Для Аватар Ошибка появляется только в определенный момент времени, не могу отловить так. (Кстати спасибо за исправление кода в человеческий вид, не нашел как сделать его таким).
О_о
Последний раз редактировалось Masam; 06.08.2015 в 11:21. |
06.08.2015, 11:23 | #7 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
Автор, прежде чем отвечать на твой вопрос, расскажи мне, зачем в твоём приложении динамические массивы вообще нужны? их предназначение
95% сбоев и ошибок приложений, находится в полу метрах от монитора
|
06.08.2015, 11:29 | #8 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
Для JUDAS
Дин. Массивы нужны, для того что не известно сколько человек подключено и сколько у них открыто файлов в расшареных папках на серваке, и что бы не выйти за границы с фиксированного массива, проще все это отлавливать в коде программы. Если более конкретно, то можно объяснить так: в Windows XP, в управлении компьютером (запускается так ПКМ на "мой компьютер" -> Управление), открыть древо Служебные программы -> Общие папки, там есть два пункта "сеансы" и "открытые файлы", если на них нажать, то увидим две таблицы они и передаются в каждый свой массив, который переделывается в TStringList и далее как писал выше.
О_о
Последний раз редактировалось Masam; 06.08.2015 в 11:38. |
06.08.2015, 11:35 | #9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
В какой-то из строк стриглиста больше символов # чем в первой строке. Либо в первой строке они вообще отсутствуют
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
06.08.2015, 11:47 | #10 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
Хорошо, я тебе отвечу где в тебя ошибка, но советую прислушаться к словам Миная и переписать код.
---------- максимальная длина массива у тебя формируется по первой строке вопрос, а если вторая строка длинее первой а третья короче второй, что произойдёт? aa#bb#cc aa#bb#cc#dd#ee#ff aa#bb ... а произойдёт попытка записи четвёртого элемента второй строки в массив с трёх ячеек вот тут, ищется самая длинная строка и по ней формируется размер массива Код:
95% сбоев и ошибок приложений, находится в полу метрах от монитора
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при создании матрицы (access violation) | Svejk | Помощь студентам | 3 | 24.08.2013 14:30 |
Ошибка при вызове функции Access violation | Hottabych | Win Api | 1 | 22.01.2011 20:35 |
TList. Ошибка Access Violation при создании. | thexqn | Помощь студентам | 3 | 28.11.2010 21:01 |