Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.12.2012, 14:11
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию Вот такой глюк

Есть структура
PR = record // Структура массива родителя
N: Integer; // Номер
I_: Integer; // Вход
OU_: Integer; // Выход
S_: Integer; // Старт
F_: Integer; // Финиш
C_: Integer; // Счетчик ссылок
end;

Массив
ContPar = record
Tpr: array of PR; // Массив родителей

Код
RDN_B:=2; integer
RDK_A:=1; integer
G1.Tpr[RDK_A].OU_:=RDN_B;
В после последней строчки в массиве G1.Tpr в строчке 0 появляется данные из строчки 1, а значение RDN_B записывается в строчку 1 как и должно быть, при записи в строчку 2 и далее такого нет

Тут скриншот таблицы http://89166974791.webasyst.net/DD/2...B_KEY=QUMxNjQ4
Видно в 0 строке цифры, а записывали в 1 строку, причем только в одну ячейку 1,О = 2. А в строке 0 появились 0,F=5 0,C=1
Как с этим бороться то?

Последний раз редактировалось AlexA, 14.12.2012 в 15:01.
Ответить с цитированием
  #2  
Старый 14.12.2012, 14:17
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от AlexA
В после последней строчки в массиве G1.Tpr в строчке 0 появляется данные из строчки 1, а значение RDN_B записывается в строчку 1 как и должно быть, при записи в строчку 2 и далее такого нет
И в чём глюк?
И где задание размера массива (SetLength)?
Ответить с цитированием
  #3  
Старый 14.12.2012, 14:45
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию

Размер задан, и его хватает, при записи в любую строчку кроме 1 все ок. Это фрагмент кода
Ответить с цитированием
  #4  
Старый 14.12.2012, 15:02
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

И сколько?
Индексация в дин. массиве идет с нуля.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 14.12.2012, 15:08
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию

Более 3-х. Проблема в том что
RDN_B:=2; integer
RDK_A:=2; integer
G1.Tpr[RDK_A].OU_:=RDN_B;
Даст нормальный результат и в строчке 0 ничего не будет.
Ответить с цитированием
  #6  
Старый 14.12.2012, 15:10
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от AlexA
Более 3-х. Проблема в том что
RDN_B:=2; integer
RDK_A:=2; integer
G1.Tpr[RDK_A].OU_:=RDN_B;
Даст нормальный результат и в строчке 0 ничего не будет.
А ты в строчку 0 вообще что-то записываешь?
Ответить с цитированием
  #7  
Старый 14.12.2012, 15:12
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию

Добавил скриншот для варианта:
RDN_B:=2; integer
RDK_A:=2; integer
G1.Tpr[RDK_A].OU_:=RDN_B;
Ответить с цитированием
  #8  
Старый 14.12.2012, 15:13
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию

В строчку 0 ничего не пишется, мне данные нужны с индекса 1
Ответить с цитированием
  #9  
Старый 14.12.2012, 15:16
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от AlexA
В строчку 0 ничего не пишется, мне данные нужны с индекса 1
Если тебе строчка 0 вообще не нужна и ты её не используешь, тогда в чём глюк?
Ответить с цитированием
  #10  
Старый 14.12.2012, 15:19
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию

Как при записи в строку 1, одного значения появляются записи в строке 0? разве это не глюк?))
А проблема в том что и в строке 1 данные меняются, см скриншот (F=5 C=3 стало F=3, C=2), причем даже логики их изменения не возможно понять. И это уже проблема
Ответить с цитированием
  #11  
Старый 14.12.2012, 15:24
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

без более обширного куска кода явно сказать что-то не получится.
либо выкладывай минимальный проект.
Ответить с цитированием
  #12  
Старый 14.12.2012, 15:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от AlexA
Как при записи в строку 1, одного значения появляются записи в строке 0? разве это не глюк?))
Если ты в строчку 0 ничего не записываешь и её не используешь, то зачем ты с неё вообще что-то читаешь? Разве данные которые в ней записаны влияют на логику работы твоей программы?
Цитата:
Сообщение от AlexA
А проблема в том что и в строке 1 данные меняются, см скриншот (F=5 C=3 стало F=3, C=2), причем даже логики их изменения не возможно понять.
Ну так ты же их сам и меняешь когда записываешь данные в строку 1. Разве нет?
Цитата:
Сообщение от AlexA
И это уже проблема
И всё ещё не вижу я проблемы. Может приведёшь более полный пример, чтобы я мог у себя его запустить и оценить этот глюк?
Ответить с цитированием
  #13  
Старый 14.12.2012, 15:36
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию

Нет же, я записываю только одно значение в 1,О=2
G1.Tpr[RDK_A].OU_:=RDN_B; (OU_ на форме отображено ка "О")
RDK_A=1
RDN_B=2

Получается пишем в 1,О=2 а в массиве появляются: 0,F=5, 0,C=1, 1,O=2
Пишем в 2,О=2 получаем в массиве 2,О=2

Да, все остальное, что в таблице уже было записано в массив.
То есть сначала создаем строки массива с данными в колонках S,F,C
А эта процедура еще раз идет по массиву и обрабатывает его значения.
Долго не мог понять причину ошибки в данных пока не локализовал
эту ситуацию.
Все свелось к тесту: ставлю RDK_A=1 - глюк, RDK_A=2 все нормально
Ответить с цитированием
  #14  
Старый 14.12.2012, 15:41
AlexA AlexA вне форума
Прохожий
 
Регистрация: 14.12.2012
Сообщения: 18
Репутация: 10
По умолчанию

Скриншот кода с двумя вариантами добавил
Ответить с цитированием
  #15  
Старый 14.12.2012, 15:41
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от AlexA
Нет же, я записываю только одно значение в 1,О=2
А потом это значение меняется на другое?
Цитата:
Сообщение от AlexA
Получается пишем в 1,О=2 а в массиве появляются: 0,F=5, 0,C=1, 1,O=2
Пишем в 2,О=2 получаем в массиве 2,О=2
Не верю. Давай пример с глюком.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter