2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
1

Delphi шифратор. Out of memory.

30.08.2010, 20:55. Показов 4838. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, я только начал программировать на delphi и написал свой первый симметричный шифратор/дешифратор (шифрует/дешифратор складывая или отнимая аски код по ключу).
Все отлично работает если текст для шифрования/дешифрования не превышает 110 символов. Но как только текст превышает 110 символов вылетает ошибка "Out of Memory". Посоветуйте, что можно сделать чтобы шифровать/дешифровывать неограниченное количество символов. Заранее спасибо!

Прилагаю код шифрования после нажатия на кнопку:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.sButton1Click(Sender: TObject);
var pass, txt: string;
a,b,c,d :integer;
begin
txt:=sMemo1.Text;
a:=length(txt);
pass:=sEdit1.Text;
b:=length(pass);
c:=round(a/b);
for d:=1 to c do
pass:=pass+pass;
pass:=copy(pass, 1, a);
for d:=1 to a do
Begin
if (ord(txt[d])+ord(pass[d]))>255 then
sMemo2.Text:=sMemo2.Text+chr((ord(txt[d])+ord(pass[d]))-255)
else
sMemo2.Text:=sMemo2.Text+chr((ord(txt[d])+ord(pass[d])));
end;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2010, 20:55
Ответы с готовыми решениями:

Memory Test на Delphi
сделать такой же тест как и в Эвересте на Delphi( сегодня первый раз увидел Delphi, даже не знаю с...

Ошибка: Out of memory на Delphi XE3
Добрый день, при разработке программ время от времени появляется ошибка Out of memory, причем в...

Create an in memory bitmap and draw directly to the memory
Здравствуйте! У меня есть пара вопросов. Знаю, что рисовать в HDC можно только с одного потока. Но...

Шифратор
Доброго дня подскажите откуда может браться вирус шифратор ? Первый раз словили шифратор на...

22
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.08.2010, 21:06 2
Цитата Сообщение от MasteRRR987 Посмотреть сообщение
неограниченное количество символов.
Так в Делфи строка(string) не ограничена 255 символами, это не Паскаль...
0
2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
30.08.2010, 21:12  [ТС] 3
Цитата Сообщение от Puporev Посмотреть сообщение
Так в Делфи строка(string) не ограничена 255 символами, это не Паскаль...
Извините, до конца не понял что Вы хотели этим сказать. Как избавится от Out of Memory? Или посоветуйте, пожалуйста, как оптимизировать его.
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.08.2010, 21:16 4
Цитата Сообщение от MasteRRR987 Посмотреть сообщение
Извините, до конца не понял
Это вы извините, я не понял...
0
2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
30.08.2010, 21:18  [ТС] 5
Цитата Сообщение от Puporev Посмотреть сообщение
Это вы извините, я не понял...
Не подскажите про память?
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
30.08.2010, 21:19 6
Цитата Сообщение от MasteRRR987 Посмотреть сообщение
вылетает ошибка "Out of Memory"
аможно узнать на какой строчке выкидывает???
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.08.2010, 21:22 7
MasteRRR987, Я набирал больше 110 и у меня никакой ошибки не было.
0
2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
30.08.2010, 21:25  [ТС] 8
Цитата Сообщение от Vas-e-na Посмотреть сообщение
аможно узнать на какой строчке выкидывает???
Не нашел кнопочки ЛС. Поэтому спрошу здесь Как узнать на какой строчке выкидывает (Borland Delphi 7 у меня)
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.08.2010, 21:28 9
Если ошибка периода компиляции, то она написана в окошке под кодом и там указан номер строки
pas(37)
Если периода исполнения, то нажмите F8
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
30.08.2010, 21:29 10
Цитата Сообщение от MasteRRR987 Посмотреть сообщение
Не нашел кнопочки ЛС. Поэтому спрошу здесь Как узнать на какой строчке выкидывает (Borland Delphi 7 у меня)
поставить точку останова (Breakpoint) и выполнить трассировку
PS я бы посоветовал вам прочитать хотя бы одну книжку...
0
2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
30.08.2010, 21:30  [ТС] 11
Указало сюда:
Delphi
1
for d:=1 to a do
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.08.2010, 21:41 12
Не знаю, нет здесь никакой ошибки, у меня все работает. А ошибка при компиляции или после ввода строк? Если последнее, приведите пример текста в Мемо и Эдите...
0
2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
30.08.2010, 21:47  [ТС] 13
Цитата Сообщение от Puporev Посмотреть сообщение
Не знаю, нет здесь никакой ошибки, у меня все работает. А ошибка при компиляции или после ввода строк? Если последнее, приведите пример текста в Мемо и Эдите...
Может из-за AlphaControls? Ошибка после ввода строк. Вот скриншот:
Миниатюры
Delphi шифратор. Out of memory.  
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
30.08.2010, 21:52 14
Цитата Сообщение от Puporev Посмотреть сообщение
Не знаю, нет здесь никакой ошибки, у меня все работает. А ошибка при компиляции или после ввода строк? Если последнее, приведите пример текста в Мемо и Эдите...
ошибка есть, но у меня она получилась не при 110 символах, а намного больше...

Добавлено через 18 секунд
Цитата Сообщение от MasteRRR987 Посмотреть сообщение
Может из-за AlphaControls? Ошибка после ввода строк. Вот скриншот:
контролы тут не причем...

Добавлено через 2 минуты
Цитата Сообщение от MasteRRR987 Посмотреть сообщение
Delphi
1
2
for d:=1 to c do
pass:=pass+pass;
вот тут ошибка, щас покумекаю как объяснить и исправить...
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.08.2010, 21:54 15
У меня нет при таком количестве...
Миниатюры
Delphi шифратор. Out of memory.  
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
30.08.2010, 21:56 16
итак объяснение:
пусть pass='Edit1';
тогда
при d=1 pass=pass+pass='Edit1Edit1' (длинна = 2*b)
при d=2 pass=pass+pass='Edit1Edit1Edit1Edit1' (длинна = 4*b)
...
при d=c pass=pass+pass='Edit1Edit1...Edit1Edit1' (длинна = 2^c*b)
если посчитаете до 2^c - это уже много... (вот тут то памяти и не хватает...)

Добавлено через 24 секунды
Цитата Сообщение от Puporev Посмотреть сообщение
У меня нет при таком количестве...
у вас ОЗУ много...

Добавлено через 38 секунд
да и пароль длинный, ворзьмите пароль в один символ и вуаля...
0
2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
30.08.2010, 21:59  [ТС] 17
Цитата Сообщение от Vas-e-na Посмотреть сообщение
итак объяснение:
пусть pass='Edit1';
тогда
при d=1 pass=pass+pass='Edit1Edit1' (длинна = 2*b)
при d=2 pass=pass+pass='Edit1Edit1Edit1Edit1' (длинна = 4*d)
...
при d=c pass=pass+pass='Edit1Edit1...Edit1Edit1' (длинна = 2^c*d)
если посчитаете до 2^c - это уже много... (вот тут то памяти и не хватает...)

Добавлено через 24 секунды

у вас ОЗУ много...

Добавлено через 38 секунд
да и пароль длинный, ворзьмите пароль в один символ и вуаля...
Сразу скажу, что у меня озу 1 гигабайт. Взял ключ 1 символ и символ этот '1'. Out of memory
Надо или оптимизировать код или как-то управлять памятью. Это лично мое "ламерское" мнение. А что скажете Вы?
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
30.08.2010, 22:01 18
у вас ОЗУ много...
да, аж 512 Мб, завис напрочь....
0
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
30.08.2010, 22:09 19
ну вот смотрите, длинна(текст)=110 символов, длинна(пароль)=1 символ, тогда с=110
а теперь возведем 2 в степень с получаем 1298074214633706907132624082305024 байт = 1267650600228229401496703205376 килобайт = 1237940039285380274899124224 мегабайт = 1208925819614629174706176 гигабайт (явно больше чем ОЗУ+файл подкачки) = 1073741824 йотабайт (как дальше называть не знаю...)

Добавлено через 2 минуты
решение:
Delphi
1
2
for d:=1 to c do
  pass:=pass+sEdit1.Text
Добавлено через 1 минуту
Цитата Сообщение от MasteRRR987 Посмотреть сообщение
Надо или оптимизировать код или как-то управлять памятью. Это лично мое "ламерское" мнение. А что скажете Вы?
а мое мнение, вам стоит все таки почитать литературу, а не сразу лезть в пекло...
ошибка хитро замаскированная, но банальная...
1
2 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 22
30.08.2010, 22:13  [ТС] 20
Спасибо сказал! Решение помогло.
Иду читать литературу.

Еще раз спасибо!
0
30.08.2010, 22:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2010, 22:13
Помогаю со студенческими работами здесь

Шифратор
1. Приведите условно графическое обозначение (УГО) преобразователя десятичного кода в двоичный код...

Шифратор
Покажите пример шифрования букаф и символов что типо этого а=%

Шифратор
Ребят помогите сделать задание:Шифратор. Создайте шифрующую программу, в которой некоторое целое...

Шифратор
Добрый день! Поймал сотрудник очередного шифратора, на почту пришла картинка. Прошелся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru