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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2009, 19:26   #1
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию Ошибка: Нарушение доступа к памяти.

Код:
SetLength(MasRitmFind, Length(MasFind), 3);
    For i:=1 to Length(MasFind) do
      Begin
        TextChange2 := Copy(TextInput,1, MasFind[i]);
        MasRitmFind[i,1] := LastDelimiter(#13#13, TextChange2) + 1;
        j:=Length(TextChange2);
        TextChange2 := Copy(TextInput,MasFind[i], Length(TextChange2));
        MasRitmFind[i,2] := AnsiPos(#13#13, TextChange2);
      End;
Это код при i=5 в строке выполнения второй функции Copy выдаёт ошибку: Нарушение доступа к памяти. Из-за чего?

Последний раз редактировалось Stilet; 03.11.2009 в 11:55.
VladimirAleks вне форума Ответить с цитированием
Старый 02.11.2009, 19:32   #2
Шульц
Форумчанин
 
Регистрация: 14.09.2008
Сообщений: 172
По умолчанию

MasFind - это какого типа переменная? У тя с параметрами на путано.
в строке:
Код:
Copy(TextInput,1, MasFind[i]);
Последние два параметра должны быть численными. Возможно что заканчивается MasFind.

и дай всю функцию или процедуру.
Шипулин А. В.
Шульц вне форума Ответить с цитированием
Старый 02.11.2009, 19:33   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
For i:=0 to Length(MasFind)-1 do
дин массивы начинаются всегда с нуля.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.11.2009, 19:48   #4
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
дин массивы начинаются всегда с нуля.
Я могу не использовать нулевые значения.
VladimirAleks вне форума Ответить с цитированием
Старый 02.11.2009, 19:50   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы подумайте тогда какой номер последнего элемента при отсчете с нуля?
последний элемент массива A:array of <чтото там>
это Length(A)-1
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.11.2009, 19:51   #6
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Шульц Посмотреть сообщение
MasFind - это какого типа переменная?
Код:
 var
    FileInput, ReadOnly   : OleVariant;
    TextInput, TextChange,TextChange2, TextFind : String;
    MasFind : Array of integer;
    MasRitmFind : Array of Array of integer;
    i, j, CaseRitm : Integer;
    RepeatOff : Boolean;
Ещё не дописал до конца:

Код:
procedure TFormFindRitm.Button3Click(Sender: TObject);
  var
    FileInput, ReadOnly   : OleVariant;
    TextInput, TextChange,TextChange2, TextFind : AnsiString;
    MasFind : Array of integer;
    MasRitmFind : Array of Array of integer;
    i, j, CaseRitm : Integer;
    RepeatOff : Boolean;
  begin

    FileInput := ExtractFilePath(Application.EXEName)+'ÕÌ(ïðîâ).doc';
    WordApplicationMain.Connect;
    ReadOnly := True;
    WordApplicationMain.Documents.Open(FileInput, EmptyParam, ReadOnly, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
    WordDocumentMain.ConnectTo(WordApplicationMain.ActiveDocument);
    TextInput := WordDocumentMain.Range.Text;
    TextChange := AnsiLowerCase(TextInput);
    TextFind := AnsiLowerCase('íåáî');


    RepeatOff := False;
    i:=0;
    Repeat
      inc(i);
      If AnsiPos(TextFind, TextChange)=0
        Then
          RepeatOff :=True
        Else
          Begin
            SetLength(MasFind, i+1);
            MasFind[i] := AnsiPos(TextFind, TextChange);
            TextChange := Copy(TextChange,MasFind[i]+Length(TextFind),Length(TextChange)-MasFind[i]-Length(TextFind));
          End;
    Until RepeatOff;

    For i:=2 to Length(MasFind) do
      MasFind[i]:=MasFind[i]+MasFind[i-1];


    SetLength(MasRitmFind, Length(MasFind), 3);
    For i:=1 to Length(MasFind) do
      Begin
        TextChange2 := Copy(TextInput,1, MasFind[i]);
        MasRitmFind[i,1] := LastDelimiter(#13#13, TextChange2) + 1;
        j:=Length(TextChange2);
        TextChange2 := Copy(TextInput,MasFind[i], Length(TextChange2));
        MasRitmFind[i,2] := AnsiPos(#13#13, TextChange2);
      End;

Последний раз редактировалось Stilet; 03.11.2009 в 11:55.
VladimirAleks вне форума Ответить с цитированием
Старый 03.11.2009, 14:42   #7
VladimirAleks
Пользователь
 
Регистрация: 11.09.2007
Сообщений: 34
По умолчанию

Цитата:
а вы подумайте тогда какой номер последнего элемента при отсчете с нуля?
последний элемент массива A:array of <чтото там>
это Length(A)-1
Всё равно та же ошибка.
VladimirAleks вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарушение доступа по адресу *** в модуле 'rtl60.bpl' rfcr Общие вопросы Delphi 5 14.09.2009 16:19
Ошибка обращения к памяти Zeraim Общие вопросы Delphi 7 01.12.2008 17:08
Нарушение доступа Perception Помощь студентам 9 11.07.2008 14:44
Ошибка создания доступа к папке Oleg-vp Работа с сетью в Delphi 4 14.01.2008 14:35
ошибка памяти. UMmi Общие вопросы Delphi 3 23.11.2006 07:06