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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.11.2008, 12:41
[The]Unknown_Master [The]Unknown_Master вне форума
Прохожий
 
Регистрация: 03.11.2008
Сообщения: 6
Репутация: 10
Восклицание EAccessViolation

Решаю задачу по программированию и вылезает такая вот ошибка.
Собственно код:
Код:
begin
 assign(input,'lookandsay.in');
 readln(n);
 setlength(str,n);
 for i:=1 to n do
  begin
  readln(st);
  m:=length(st);
  for y:=1 to m-1 do
   begin
    if st[y]=st[y+1] then k:= k+1
       else
        begin
         str[i]:=str[i]+inttostr(k)+st[y];
         k:=1;
        end;//else
   end;// for y
   end;//for i
 assign(output,'lookandsay.out');
  for i:=1 to n do writeln(str[i]);
end.
Вылезает ошибка+ в выходной файл записывается коряво.
Подскажите, где ошибка.
Заранее спасибо.
Ответить с цитированием
  #2  
Старый 03.11.2008, 12:52
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Во первых укажи типы переменных, а во второх кто файлы открывать/закрывать будет?
Ответить с цитированием
  #3  
Старый 03.11.2008, 13:03
[The]Unknown_Master [The]Unknown_Master вне форума
Прохожий
 
Регистрация: 03.11.2008
Сообщения: 6
Репутация: 10
По умолчанию

Код:
var i,y,n,k,m:integer;
     st:string;
     str: array of string;
Если закрыть - ничего не меняется.
Ответить с цитированием
  #4  
Старый 03.11.2008, 13:25
Act Act вне форума
Новичок
 
Регистрация: 01.11.2008
Сообщения: 72
Репутация: 10
По умолчанию

файл на запись/дозапись открой.
Ответить с цитированием
  #5  
Старый 03.11.2008, 13:32
[The]Unknown_Master [The]Unknown_Master вне форума
Прохожий
 
Регистрация: 03.11.2008
Сообщения: 6
Репутация: 10
По умолчанию

Всмысле reset,rewrite? Пробовал- не помогает.
Ответить с цитированием
  #6  
Старый 03.11.2008, 14:25
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

Ошибка означает доступ к обьекту которого не существует (обычно). Делаем точну остановки на начале функции и далее трасировкой нах=одим ошибку.
__________________
Delphi - это лишь инструмент, а что ты сможешь создать при помощи этого инструмента, зависит исключительно от тебя.
Ответить с цитированием
  #7  
Старый 03.11.2008, 15:09
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Вот как типы указал, сразу стало ясно
Код:
var
 i, y, n, k, m: Integer;
 st: String;
 str: array of String; // массив динамический!!! Начинается с нуля!
 Input, Output: TextFile;
begin
 AssignFile(Input,'lookandsay.in'); // инициализация

 Reset(Input);// окрытие

 Readln(Input, n); // читается так

 Setlength(Str, n);

  for i := 0 to n-1 do // здесь у тебя была ошибка
  begin
   Readln(Input, st);
   m := length(st);
   k := 1;
    for y := 1 to m-1 do
    begin
     if st[y]=st[y+1] then
      Inc(k)
     else
     begin
      str[i] := str[i]+ IntToStr(k) + st[y];
      k := 1;
     end;
   end;
  end;
 
 CloseFile(Input); // закрываешь

 AssignFile(Output, 'lookandsay.out'); // все аналогично
 ReWrite(Output);

  for i:=0 to n-1 do
   Writeln(Output, str[i]);
 CloseFile(Output);
Ответить с цитированием
  #8  
Старый 03.11.2008, 15:45
[The]Unknown_Master [The]Unknown_Master вне форума
Прохожий
 
Регистрация: 03.11.2008
Сообщения: 6
Репутация: 10
По умолчанию

Возникает на end. т.е. при завершении программы.
Drozh, если сделать, как ты показал, возникает другая ошибка - Access violation at adress такой-то in module 'coriede70.bpl'.

Последний раз редактировалось [The]Unknown_Master, 03.11.2008 в 15:52.
Ответить с цитированием
  #9  
Старый 03.11.2008, 16:00
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Хм... У меня все работало... У тебя файлы в дирректории с программой присутствуют? Или просто приведи код полностью
Ответить с цитированием
  #10  
Старый 03.11.2008, 16:31
Alexo Alexo вне форума
Начинающий
 
Регистрация: 24.01.2007
Сообщения: 191
Репутация: 15
По умолчанию

Цитата:
Сообщение от [The]Unknown_Master
Возникает на end. т.е. при завершении программы.

Видимо дебагер в семерке как то плохо работает, первая ошибка должна была словиться в конце цикла.
__________________
Delphi - это лишь инструмент, а что ты сможешь создать при помощи этого инструмента, зависит исключительно от тебя.
Ответить с цитированием
  #11  
Старый 03.11.2008, 19:36
[The]Unknown_Master [The]Unknown_Master вне форума
Прохожий
 
Регистрация: 03.11.2008
Сообщения: 6
Репутация: 10
По умолчанию

Drozh, файлы присутствуют.Пробовал исправить свой, пробовал скопировать и вставить твой код.Ноль эффекта.Хотя нет - стала вылезать другая ошибка(((
Ответить с цитированием
  #12  
Старый 03.11.2008, 21:12
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Ты чтото не так используешь, приведи свой код полностью
Ответить с цитированием
  #13  
Старый 12.11.2008, 20:15
[The]Unknown_Master [The]Unknown_Master вне форума
Прохожий
 
Регистрация: 03.11.2008
Сообщения: 6
Репутация: 10
По умолчанию

Сегодня нашёл ошбку- она заключалась в использовании Delphi 7 под
висту.Перенёс на XP - всё заработало(((
Ответить с цитированием
  #14  
Старый 12.11.2008, 20:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,093
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Гм... я свои програмки проверял на висте - все работает.
Единственное, что отказалось работать - одна штука, которая пользует SQLite, но об этом и так известно, что на висте работать не будет (хотя я слышал, что какими-то шаманскими танцами можно и ее заставить работать).
Ответить с цитированием
  #15  
Старый 22.01.2011, 11:37
devais devais вне форума
Прохожий
 
Регистрация: 22.01.2011
Сообщения: 1
Репутация: 10
По умолчанию EAccesViolation Error

Дело в том, что элементы массива String могут быть разные по длине. А Дельфи обращается к этим самым элементам по адресу в памяти и крайне редко (100% случаев) сбивается.

Я где-то читал, что надо обязательно ограничивать длину строки, когда создаешь динамический массив.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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