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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 10:35   #1
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Delphi 7, Windows 7

Имеется следующий код:
Код:
// ЗАГРУЗКА ДАННЫХ ИЗ ФАЙЛА ====================================================
procedure TSCADDocument.LoadFromOpenFile(var TF: TextFile; ResStr: TStrings; var Err, Mes:  Integer);
type
  TSlovoType = (stInt, stReal, stStr, stInterv);
var
  rabR: Real;
  rabInt: TInterval;
  FileCh, DocCh, RazdCh, StrCh, DS: Char;
  Document, Razdel, Str, Slovo, StrSlovo: String;
  NomDocum, NomStr, NomDocCh, NomRazdCh, NomStrCh, NomFileStr: Integer;

  ...

  // Следующий раздел ----------------------------------------------------------
  procedure NextRazdel;
  var
    Flag: Boolean;
  begin
    Razdel := '';
    Flag := False;
    while not EOD do begin
      DocCh := Document [NomDocCh];
      NomDocCh := NomDocCh + 1;

      case DocCh of
        '/': begin
          if {Некоторое условие, завясящее от формата файла} then begin
            Razdel := Razdel + DocCh;
          end
          else begin
            Flag := True;
            Break;
          end;
        end;
        #13: begin
        end;
        else begin
          Razdel := Razdel + DocCh;                            
        end;
      end;
    end;
    if not Flag then Razdel := '';
    NomRazdCh := 1;
  end;

  ...

begin
...
  NextRazdel;
...
end;
// КОНЕЦ LoadFromFile ==========================================================
В строке подсвеченной красным цветом возникает ошибка
Цитата:
Project ArmSACD.exe raised exception class EAccessViolation with message 'Access violation at address 004001C52 in module 'ArmSCAD'. Write of address 00000000'. Process stopped. Use Step or Run to continue
Цитата:
Сообщение от перевод
Проект ArmSACD.exe повысил класс исключений EAccessViolation с сообщением 'Нарушение прав доступа в адресе 004001C52 в модуле 'ArmSCAD'. Запись адреса 00000000'. Процесс остановился. Используйте Шаг или Выполнение, чтобы продолжать
Это происходит при добавлении символа к строке. При этом Razdel <> nil.
Безымянный.jpg
В следующий момент ОШИБКА.
Примечательно, что до этого момента операция уже успешно проходила раз эдак 10000. Но дойдя именно до этого состояния (Razdel='1 1 Name="ГА_ПС_Бв" : 1500-1630 1638 1639 ' и DocCh = '1') программа вылетает.

Это у меня на работе, тут Windows 7. Дома на XP (и не только дома) все работает нормально. EXE-шник откомпилированный дома на работе тоже выдает ошибку:
Безымянный1.jpg

Не сложно догадаться, что я это гружу данные из файла. Так вот, с другим файлом, этого не происходит.

Последний раз редактировалось Stilet; 17.09.2010 в 12:04.
Sibedir вне форума Ответить с цитированием
Старый 17.09.2010, 11:58   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Хм... быть может в семерке нельзя складывать стринг и чар? Попробуй DocCh сделать типом String[1]
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 17.09.2010, 12:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Sibedir
А можно твой проект пощупать? Что-то смутно верится что семерка так со строками работает...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2010, 12:07   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Помогло вот это
Код:
          try
            Razdel := Razdel + DocCh;
          except
            sss := Razdel + DocCh;
            GetMem (Pointer (Razdel), 1);
            Razdel := sss;
          end;
Я в шоке

Добавлено ----------------------------------------
Правда вылетает Invalid pointer operation, но все работает.

Последний раз редактировалось Sibedir; 17.09.2010 в 12:10.
Sibedir вне форума Ответить с цитированием
Старый 17.09.2010, 12:10   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Помогло вот это
Плохое спасение... Может боком вылиться... Я бы дальше искал способы.
Всетки если не сложно прикрепи сюда архив с проектом, если конечно не используешь там чего-то сторонненго.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2010, 12:17   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Вот проект со злощастным файлом:
111.zip
1. Вырианты схем -> Добавить
2. Схема -> [...]
3. Вибираем мой файл (в той же папке должны быть и *.arr)

С этими файлами все нормально. Они были сделаны еще на XP
222.zip
Sibedir вне форума Ответить с цитированием
Старый 17.09.2010, 12:36   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Sibedir
Проверил на 2010-ке и на D6 - все прекрасно работает. Ничего не падает.
Специально поставил бряк на те строки - все идеально прошло.
То видать тебе кривучая 7-ка попалась.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2010, 12:40   #8
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код:
DocCh: String[1]
не помогло

Еще нюанс: ArmSCAD.exe остается висеть в процессах даже после закрытия окна, если при его работе была ошибка "Invalid pointer operation".

Цитата:
То видать тебе кривучая 7-ка попалась.
А в чем ее кривизна? Все программы работают нормально. И главное: почему с другими файлами этого не происходит.
Кстати, вы имеете в виду Delphi 7 или W7?

Последний раз редактировалось Sibedir; 17.09.2010 в 12:43.
Sibedir вне форума Ответить с цитированием
Старый 17.09.2010, 13:18   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вы имеете в виду Delphi 7 или W7?
Delphi 7. Я лично еще не видел нормально семерки. Все мне попадались ужасные с глюками в неожиданное время и неожиданных местах.
Потому доси на D6 работаю, ну постепенно на D2010 планирую перебираться.
Цитата:
И главное: почему с другими файлами этого не происходит.
Не знаю... Мне всетки кажется что именно библы этой версии с червоточинкой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.09.2010, 12:31   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

И на том спасибо. Хотя почему так скупо. ОГРОМНОЕ СПАСИБО!!!
Я думал меня еще год никто на RAD Studio не пересадит. Вот, установил. Буду теперь на Delphi 2010 работать. Боялся что D7 начнет конючить. Не-е-е, все нормально.
А там смотри и сбудется мечта идиота образно выражаясь. Хочу знаете ли освоить Си.
Ну да ладно, освою-не освою, а прога под D2010 работает на ура.
Sibedir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при работе C++ Builder 6.0 green-tree Помощь студентам 3 19.07.2010 09:59
Ошибка при работе с процедурой Hant111 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.03.2010 20:10
Ошибка при работе с БД Access Evgen1976 БД в Delphi 8 16.06.2009 21:29
Ошибка при работе с потоками( _SeRGeaNT_ Общие вопросы C/C++ 2 11.01.2009 14:50
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10