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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2013, 20:00   #11
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Все правильно с Arr[0]. C собакой не прокатит и не должно. TC, ставь точку останова и пошагово проверяй где вылетаешь и почему
Я бы с удовольствием, но у меня Delphi категорически не хочет отображать что-либо в режиме Debug Layout
Ни Local Variables, ни чего(
Poltish вне форума Ответить с цитированием
Старый 16.06.2013, 20:04   #12
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
По умолчанию

form2.Show; - при заккоментированной данной строке ошибку не выдаёт.
Poltish вне форума Ответить с цитированием
Старый 16.06.2013, 20:10   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тогда смотри от Stilet-а #2
Цитата:
Значит проблема не в этом коде.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.06.2013, 22:30   #14
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Цитата:
Сообщение от Poltish Посмотреть сообщение
Если честно я с темой чтения и записи в файл по средствам BlockRead и BlockWrite только начинаю работать. Не подскажете зачем тут собачка?
Да, Аватар прав. Собака тут лишняя:
Цитата:
Аргумент Buffer - это не указатель, а нетипизированный var-napaметр. Передавайте саму переменную, а не ее адрес. Если вы передаете указатель на динамически выделенный буфер, разыменуйте ссылку при вызове BlockRead.
Собака - это указатель на адрес в памяти. Просто обычно в функции чтения блоков памяти пер]едают указатель на начало памяти, куда считывать.
Изначально у тебя было правильно.

Я не очень понял из описания функции что она считывает (вроде как может не только по байту считывать). Хотя у тебя вроде установлен размер записи в 1 байт.
Можешь попробовать указать заведомо большую длину массива и посмотреть, будет ли ошибка на маленьком файле. Как-то так:
SetLength(Arr, Size*100);

Если не ошибка останется, то ищи в другом месте)


Короче. Проверил код у себя - всё нормально отработало.

Последний раз редактировалось TwiX; 16.06.2013 в 23:24.
TwiX вне форума Ответить с цитированием
Старый 17.06.2013, 17:36   #15
Poltish
Пользователь
 
Регистрация: 16.03.2013
Сообщений: 35
Вопрос

Цитата:
Сообщение от TwiX Посмотреть сообщение
Да, Аватар прав. Собака тут лишняя:


Собака - это указатель на адрес в памяти. Просто обычно в функции чтения блоков памяти пер]едают указатель на начало памяти, куда считывать.
Изначально у тебя было правильно.

Я не очень понял из описания функции что она считывает (вроде как может не только по байту считывать). Хотя у тебя вроде установлен размер записи в 1 байт.
Можешь попробовать указать заведомо большую длину массива и посмотреть, будет ли ошибка на маленьком файле. Как-то так:
SetLength(Arr, Size*100);

Если не ошибка останется, то ищи в другом месте)


Короче. Проверил код у себя - всё нормально отработало.
Спасибо, понял. И спасибо большое что проверил В общем "забив" на время на этот отрывок кода, создал обычную форму, и при её ВЫЗОВЕ! обычном .Show такая же ошибка. Что это может быть?
Poltish вне форума Ответить с цитированием
Старый 18.06.2013, 01:24   #16
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

а код на закрытии form2 есть?
iworm2009 вне форума Ответить с цитированием
Старый 18.06.2013, 03:23   #17
iworm2009
Пользователь
 
Регистрация: 07.05.2013
Сообщений: 51
По умолчанию

интересно, у меня этот код вызывает через ~ 2 мин system exception
ntdll.zwclose + 0x12
Код:
procedure TForm3.Button5Click(Sender: TObject);
var
F : File;
Arr : array of Byte;
S, STmp : String;
i, j, Size, H, Len : Integer;
begin
op.Execute(0);
{Привязывание, чтение и т.д. файла}
AssignFile(F, Op.FileName);
Reset(F, 1);
Size:= FileSize(F); 
SetLength(Arr, Size); 
BlockRead(F, Arr[0], Size);
CloseFile(F);

{Формирование данных для RichEdit}
Len := Size * 3 + (Size div 16);    
  if Size mod 16 > 0 then Dec(Len);  
  SetLength(S, Len);         
  H := High(Arr);     
  j := 1;
  for i := 0 to H do begin    
    STmp := IntToHex(Arr[i], 2);
    S[j] := STmp[1];       
    S[j + 1] := STmp[2];  
    Inc(j, 2);
    if i = H then Continue;
    if i mod 16 = 15 then begin
      S[j] := #13;
      S[j + 1] := #10;
      Inc(j, 2);
    end else begin
      S[j] := #9;  
      Inc(j);
    end;
  end;

RichEdit1.Text:= S;

  Caption := inttostr(size) +' ' + inttostr(len)  + ' '+ inttostr(h) + ' ' + inttostr (j);

end;
все на одной форме

в richedit при первом впечатлении все хорошо отображает

Последний раз редактировалось iworm2009; 18.06.2013 в 03:30.
iworm2009 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти ошибку Яська Помощь студентам 1 04.04.2010 17:23
Ребят,надо найти ошибку vovey Помощь студентам 7 28.03.2010 12:40
Найти ошибку Uvaroff Помощь студентам 3 13.01.2010 01:45
Ребят найдите ошибку! agunek Помощь студентам 8 31.10.2009 16:24
ребят, помогите найти ошибку Frame1992 Помощь студентам 14 08.10.2009 02:01