Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
14-09-2009 04:40 | Сообщение от автора вопроса
To Geo:
Ну зато на собственном опыте убедился, что записав что-то в "чужую" область памяти
можно получить неожиданый результат.
to Fox_It:
AV тем и коварна, что возникать может не всегда, и что причина возникновения может нахолдиться совсем в другом месте, а не в той строоке, на которой AV выскочил.
Вы не правильно поняли.
Этот массив вообще в другой ФОРМЕ!
никакого отношения к дереву не имеет.
просто после заполнения 1 "лишнего" элемента showmessage начинал глючить везде, во всей программе.
11-09-2009 05:19 | Вопрос к автору: запрос дополнительной информации
А вы случайно не создавали функцию с именем ShowMessage? Или может вы что-то используете нестандартное в списке юзес? Попробуйте также запуститься с включенным параметром Use Debug Dcu-s и пройтися по ф7 в самом ShowMessage
To Сергей Любезный:
хард - вряд ли, он же не подгружает элементы дерева в цикле динамически из файла, а вот память очень может быть, я как-то и упустил этот момент :( в свое время я сталкивался с подобной проблемой, и причина была как раз там
11-09-2009 04:59 | Вопрос к автору: запрос дополнительной информации
а случаем не может быть такого, что в процессе выполнения цикла validsheet.newTree.Items.Count становится меньше, т.е. узлы дерева удаляются? если узлов не много, попробовать поставить точку останова внутри цикла и каждый раз проверять значкния i, collist, или дописать в конец цикла ShowMessage(IntToStr(collist)); Кстати, какой тип имеет collist, не Byte случайно, а в дереве при этом более 256 узлов?
Точку останова надо было поставить и на ShowMessage, дабы проверить, не возникает ли AV раньше.
Если же доходит до нее, то следует проверить корректность параметра arr в inttostr(length(arr)).
P.S. Учитесь пользоваться отладчиком.
Отладчиком пользоваться умею.
естесственно ставил точку останова на этой строчке, ошибка именно на ней
Что такое arr и откуда оно берется? Access violation скорее всего вылетает по причине не существования arr в памяти на момент выполнения данной строчки кода.
написал же что не важно что в showmessage Б всё равно ошибка.
Переместите ваш "Привет" до цикла и убедитесь, что ошибка будет происходить уже на строке collist:=0;
Переместил, и убедился, что ошибка на showmessage
Кстате что есть validsheet? validsheet.newTree
validsheet-форма
newTree-TTreeview на этой самой форме
Точку останова надо было поставить и на ShowMessage, дабы проверить, не возникает ли AV раньше.
Если же доходит до нее, то следует проверить корректность параметра arr в inttostr(length(arr)).
11-09-2009 04:22 | Вопрос к автору: запрос дополнительной информации
showmessage('Листов в списке: ' + inttostr(length(arr)) + #10#13 + 'Листов в дереве: ' + inttostr(collist));
Что такое arr и откуда оно берется? Access violation скорее всего вылетает по причине не существования arr в памяти на момент выполнения данной строчки кода.
Переместите ваш "Привет" до цикла и убедитесь, что ошибка будет происходить уже на строке collist:=0;
Думаю проблема в том, что либо validsheet либо validsheet.newTree - ссылается не туда куда нужно. Кстате что есть validsheet? validsheet.newTree ?
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.