Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Ошибка доступа к памяти (указатели)   Найти похожие ветки 

 
Mer01   (2010-03-15 01:12) [0]


function RTEACrypt(ap: PIntArray; bp: PIntArray): LongInt;
begin
 a := ap[0];// Ошибка
//...
procedure DataCrypt(Input:Pointer; Ouput: Pointer; Len:LongInt);
begin
 while Len > 0 do  
 begin
   RTEACrypt(Input, Ouput);
   inc(PIntArray(Input), SizeOf(TIntArray));
   inc(PIntArray(Ouput), SizeOf(TIntArray));
   dec(Len, SizeOf(TIntArray));
 end;
end;

procedure DataDecrypt(Input:Pointer; Ouput: Pointer; Len:LongInt);
begin
 while Len > 0 do  
 begin
   RTEADecrypt(Input, Ouput);
   inc(PIntArray(Input), SizeOf(TIntArray));
   inc(PIntArray(Ouput), SizeOf(TIntArray));
   dec(Len, SizeOf(TIntArray));
 end;
end;

procedure StrToKey(Pass:String; var key: TKey);
begin
end;

procedure TMainForm.CryptBtnClick(Sender: TObject);
var
 s: String;
begin
 s := "Текст, Text";// ЕСЛИ ЗАДАТЬ ТАК ТО ОШИБКА
 //s := Memo.Lines.Text; ЕСЛИ ТАК ТО ОШИБКИ НЕТ!
 DataCrypt(@s, @s, Length(s));
 Memo.Lines.Add(s);
 DataDecrypt(@s, @s, Length(s));
 Memo.Lines.Add(s);
end;

Ошибка происходит после первой итерации.


 
Германн ©   (2010-03-15 01:34) [1]


> s := "Текст, Text";// ЕСЛИ ЗАДАТЬ ТАК ТО ОШИБКА

Если задать так, s ссылается на область памяти в кодовом сегменте. Имхо.


 
MBo ©   (2010-03-15 05:48) [2]

куда указывает @s ?


 
Mer01   (2010-03-15 07:53) [3]

Тоесть как куда? На s: String;


 
MBo ©   (2010-03-15 08:15) [4]

>Тоесть как куда? На s: String;
Стоит разобраться, на какое именно место строки указывает.


 
Сергей М. ©   (2010-03-15 08:23) [5]


> Mer01   (15.03.10 07:53) [3]



> s := "Текст, Text";// ЕСЛИ ЗАДАТЬ ТАК ТО ОШИБКА


И это совершенно нормально.
Константы-литералы размещаются в секции данных, страницы которой имеют readonly-атрибут прав доступа.


> как куда? На s: String;


А надо не на s: String, а на буфер строковых данных, управляемый этой переменной:

DataCrypt(PChar(s), PChar(s), Length(s));

что эквивалентно

DataCrypt(@s[1], @s[1], Length(s));


 
Mer01   (2010-03-15 14:43) [6]

Хм... PChar(s) - уже делал, вызывало туже ошибку, а вот @s[1] почему-то сработало O_o Спасибо)



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.085 c
2-1271803296
RGV
2010-04-21 02:41
2010.08.27
alt+Tab


2-1272286875
Вик
2010-04-26 17:01
2010.08.27
Invalid floating point operation


4-1232550179
Magedon
2009-01-21 18:02
2010.08.27
Как обновить часть экрана?


2-1268472453
Первокурсница
2010-03-13 12:27
2010.08.27
Программа "Защита от дураков", оператор case


2-1267362292
Ufamag
2010-02-28 16:04
2010.08.27
Вывод HTML документа на печать (принтер)