Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2012, 12:17   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию При отладке, странным образом сбрасываются значения.

Доброго времени суток!

Немогу понять, в чем проблема:
Код:
     //Размер записи
      sRecSize := StrToIntDef(sOffsetRec,0);
      //Попытка переместить значение в другую ячейку памяти а не поставить указатель на неё
      MoveMemory(@sRecSize2,@sRecSize,SizeOf(sRecSize));

      { Теперь надо почистить файл от примисей }


      tms.Size := tms.Size - SizeOf(Integer);


      SetLength(tbuff, tms.Size - iOffsetRecLen);

      bStart := tms.Seek(iOffsetRecLen, soFromBeginning);
      bEnd := tms.Seek(sRecPos, soFromCurrent);

      tms.Seek(iOffsetRecLen, soFromBeginning);
      tms.Read(tbuff, bEnd - bStart);

      //Вот тут sRecSize2 и SRecSize просто сбрасываются на макс. значение Integer
      bEnd:=bEnd+sRecSize2; //<< = выполнение дальнейшего кода НЕВОЗМОЖНО!
      bStart:=tms.Seek(bEnd,soFromBeginning);
Я не меняю значения переменных, они исп. при вычислении.
Самое странное, что sRecSize2 спец. заведена, чтобы держать там значение из sRecSize, на случай если sRecSize обнулится непостижимым образом, более SRecSize2 более нигде не упоминается, кроме как в строке перемещения данных(MoveMemory) sRecSize => sRecSize2.
Могу видео записать... позже прикреплю.

В чем трабл - не понятно.
Вложения
Тип файла: zip sampleBug.zip (1.14 Мб, 7 просмотров)

Последний раз редактировалось Человек_Борща; 10.08.2012 в 12:41.
Человек_Борща вне форума Ответить с цитированием
Старый 10.08.2012, 12:33   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А точно (bEnd - bStart) не больше (tms.Size - iOffsetRecLen)? В отладке посмотрите
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 10.08.2012, 12:40   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Не больше.
Прикрепил видео....
Человек_Борща вне форума Ответить с цитированием
Старый 10.08.2012, 12:47   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так, пошагово идите и смотрите после какой строки падает.
используйте инспектор значений.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2012, 12:52   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Пепел Феникса, А до этого я телепатически значения из памяти ОЗУ вытаскивал? //не смешно.

Строку после которой падает, выделил:
Код:
      tms.Seek(iOffsetRecLen, soFromBeginning);
      tms.Read(tbuff, bEnd - bStart);

      //Вот тут sRecSize2 и SRecSize просто сбрасываются на макс. значение Integer
Понятнее не стало...

tBuff в 5 раз больше считываемого обьема..
Человек_Борща вне форума Ответить с цитированием
Старый 10.08.2012, 12:54   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так, tBuff это кто?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2012, 12:55   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

массив array of byte

Факт в том, что обнуляются левые переменные...
Человек_Борща вне форума Ответить с цитированием
Старый 10.08.2012, 12:56   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а теперь меняем на tbuff[0] меняется ли чтото?
я боюсь просто в стек читали...
то есть
Код:
tms.Read(tbuff[0], bEnd - bStart);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2012, 12:59   #9
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

А ежели MoveMemory заменить на Move?
http://www.delphimaster.net/view/2-1167297116

Сорри, это одно и тоже
astecenko вне форума Ответить с цитированием
Старый 10.08.2012, 12:59   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Пепел Феникса Хм, теперь проблем нету. Примного благодарен, уже весь мозг вынес себе.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа работает странным образом Theseus Общие вопросы C/C++ 1 26.06.2012 16:41
Проблема при отладке Leonid183 Visual C++ 0 27.10.2011 16:23
Ошибка при отладке Kernel32 Общие вопросы Delphi 0 04.05.2011 14:52
ИС при отладке программы Svensson Помощь студентам 1 12.11.2008 00:28
Не показывает значения элементов массивов при отладке klerk Общие вопросы Delphi 10 01.11.2007 16:14