Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.062 c
15-1265186248
Mike Kouzmine
2010-02-03 11:37
2010.08.27
Глобальное Затемнение


15-1275455248
ZeroDivide
2010-06-02 09:07
2010.08.27
Как работают подобные устройства?


2-1275132390
shkurkin
2010-05-29 15:26
2010.08.27
Ньюансы работы с COM-портами и асинхронный ввод/вывод


9-1187036732
Mr.Vlad
2007-08-14 00:25
2010.08.27
GLODEManager


3-1226323378
DSKalugin
2008-11-10 16:22
2010.08.27
Авторизация в DataSnap/SOAP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский