|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.08.2015, 11:48 | #11 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
Для Аватар.
Больше похоже, что он по сети не успевает как бы передать данные, НО у меня код переделывания в массив в клиентской части стоит позже, чем принятия этих данных, т.е. он в любом случае должен исполнять его лишь после принятия данных, но даже если он как то все таки не успел передать, то я ставил задержку Sleep и в 1 сек. и более. Все равно выходит ошибка. Вот код с серверной части Код:
Модератор
О_о
Последний раз редактировалось Аватар; 06.08.2015 в 11:58. |
06.08.2015, 11:57 | #12 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
вариант нового кода
Код:
95% сбоев и ошибок приложений, находится в полу метрах от монитора
Последний раз редактировалось JUDAS; 06.08.2015 в 21:47. |
06.08.2015, 11:57 | #13 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
JUDAS
Вы совсем не правильно поняли. "максимальная длина массива у тебя формируется по первой строке вопрос, а если вторая строка длинее первой а третья короче второй, что произойдёт?" У меня не может быть что во второй строчке будет больше или меньше колонок чем в первой или любой другой строчке, они строго фиксированы, количество символов не несомненно будет разное (т.е. в каждой строчке СтрингЛист будет только определенное количество символов "#" - этот знак как раз и показывает заканчивалась ячейка в массиве, дальше после этого знака пошли символы уже другой ячейки массива, но той же строки). Попробую проще объяснить. Вот смотрите есть две таблицы у каждой таблицы определенное количество столбцов (у каждой таблицы свое определенное количество столбцов), но количество строк не известно, оно очень быстро изменяется. Далее что бы передать эти таблицы от одного компьютера к другому я пользуюсь компонентами инди (idTCPServer и idTCPClient на серверной и клиентской части соответственно), для того что бы передать таблицы в виде массива я их преобразую в СтрингЛист (Типа как по технологии XML таблиц), далее компьютер который принимает он сначала получает естественно СтрингЛисты и он потом их обратно преобразует в массив который выводится в СтрингГрид. Но самое интересное в том, что вся эта конструкция работает как бы сказать в единичных подобных запросах, но как только я пытаюсь сделать что бы он допустим запрашивал эти таблицы раз в 2 сек. и при этом начинаю подключаться к расшарам, выходит эта ошибка. Надеюсь так более понятно изложил.
О_о
Последний раз редактировалось Masam; 06.08.2015 в 12:12. |
06.08.2015, 12:01 | #14 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
вопросы:
1. число знаков # в строке отличается? 2. имя папки может содержать один или несколько #? (знак допустим для имён) Попробуйте мой вариант, и вам не нужно будет контролировать размеры, для каждой строки они будут установлены отдельно. п.с. конструкция array of array это не квадратная матрица из учебника по вышу, а к4аждый из элементов может содержать любое количество ячеек включая 0 вариант кода серверной части Код:
95% сбоев и ошибок приложений, находится в полу метрах от монитора
Последний раз редактировалось JUDAS; 06.08.2015 в 12:06. |
06.08.2015, 12:28 | #15 |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
Для JUDAS
1. Число знаков # в строках не отличаются, в каждой строке их только определенное количество. 2. У нас сервере нету папок в которых есть названия с этим символом. --------- Пасиба за вашу помощь, завтра проанализирую ваши варианты кода и попробую внедрить, сегодня уже не успеваю.
О_о
|
06.08.2015, 21:46 | #16 | |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
>
Цитата:
Проблем в изначальном коде в том, что Вы тупо переполняете стек и забиваете память мусором по причине возврата динамического массива в качестве результата функции. В таких случаях, динамический массив лучше передавать параметром VAR (см. красный текст выше по посту) и чистить на входе в функцию (см.фиолетовый текст выше). рекомендую чистить не только результирующий двухмерный массив, а и каждый его элемент "минимассивчик"-строчка. п.с. Когда в 1996 году я начал изучать Паскаль, мне говорил один гуру-программист - "всё что ты в проекте породил, ты должен умножить на ноль".... иначе утечка памяти
95% сбоев и ошибок приложений, находится в полу метрах от монитора
Последний раз редактировалось JUDAS; 06.08.2015 в 21:54. |
|
07.08.2015, 06:48 | #17 | |
Пользователь
Регистрация: 19.11.2009
Сообщений: 19
|
JUDAS
Спасибо огромное, получилось! =) Осталось не много переделать, под ваш новый одномерный массив, где каждый элемент дополнительный подмассив. =) Цитата:
О_о
|
|
07.08.2015, 11:06 | #18 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
Причина не в неопытности, а в не в правильном пути при выборе технологии.
Ещё в конце 90-х опытные дяди программисты меня учили - "старайся создавать такие функции, чтобы размер памяти в результате не превышал 8 байт". Когда я написал первую функцию которая возвращает динамический массив трёхмерных точек в result, и во время работы появлялась плавающая ошибка а при длительной out of memory, я вспомнил слова того "дядьки" и переделал функцию из такого вида Код:
Код:
или const XXX : string; или var XXX:string; и никогда не использую XXX:string; п.с. string Это тоже ..как бы.. встроенный динамический массив
95% сбоев и ошибок приложений, находится в полу метрах от монитора
|
07.08.2015, 11:35 | #19 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
они хоть и массив в сути, но работают иначе, они всегда в куче, и никогда не на стеке(не путаем с ShortString), передаются по ссылке и копируются по необходимости. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
07.08.2015, 12:03 | #20 | |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
Цитата:
вариант 1 function XXX(const value : string):integer; передача строки в качестве константы, которая не изменяется внутри функции. Параметр принимается, на основании информации передаваемой value выполняются какие то операции и формируется результат вариант 2 function XXX(var value : string):integer; передача строки в качестве переменной, которая может изменяться внутри функции. Параметр принимается, со строкой могут выполнятся какие то манипуляции вплоть до очистки, формируется какой то результат вариант 3 function XXX(value : string):integer; ??? цель и функции такого описания
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 |