• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Нехватка виртуальной памяти в Delphi 6

  • Автор темы semantics
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

semantics

Работаю с программой несколько месяцев в DELHI 6. После добавления одного модуля программа перестала компилироваться. Выдается сообщение:

ERROR
Unable to create process:Файл подкачки слишком мал для завершения операции

Увеличение файла подкачки не помогает. Сокращение программы тоже не помогает - удалил три модуля.
Удалил Касперского - не помогает?
Подскажите, что можно сделать?
 
0

0dayAlgorithm

А какой модуль был добавлен - тот после которого все началось?
А в целом сколько у вас оперативы и какой размер файла подкачки?
 
S

semantics

Добавленный модуль я удалил - не помогает.
Файл подкачки был 372 - сделал 600 - не помогает
Памяти у меня мало - 256

убрал весь добавленный код. Теперь компиляция проходит, но вылезает ошибка доступа:

Project Mon.exe raised exception class EAccessViolation with message 'Access violation at address 040CAEAF in module Mon.exe. Read of address 00000314'. Process stopped. Use step or Run to continue.

Как это может происходить? Где-то модули накладываются?
 
S

semantics

Ошибку нашел, но причина непонятна вот процедура -ниже, при открытии закомментированной строки
// ntables.cont[i2].tab1.cont[k]:=VT.cont[k];
выскакивает сообщение о нехватке виртуальной памяти
Что криминального в этом операторе ?- не могу понять
Повторяется имя поля "cont" - и где-то зацикливается?

--------------------------------------------------------
procedure copyw(i1,i2,i3:integer);
// i1: table type(1-6), i2:newtable number; i3:eek:ld table number
var VT:ttokens;j,k:integer;
begin
for j:= 1 to tables[i3].Quant do
begin
VT:=ExtrTokens(tables[i3].Data[j]);
if i1 = 1 then
for k:= 1 to vt.len do
begin
// ntables.cont[i2].tab1.cont[k]:=VT.cont[k];
end;
if i1 = 2 then
for k:= 1 to vt.len do
begin
// ntables.cont[i2].tab2.cont[k]:=VT.cont[k];
end;
end;
end;
 
S

semantics

Самое непонятное в том, что эта процедура не получает управления при запуске программы.
- Лишь ее присутствие в коде вызывает переполнение виртуальной памяти на этапе исполнения, при том, что компиляция проходит нормально!
 
0

0dayAlgorithm

Не могу точно сказать по приведенному коду, незнаю что такое ttokens. Попроюуйте изолировать проблемную процедуру, и создать отладочный проект где только она будет использоваться. Скорее всего вы обращаетесь к необьявленному или несуществующему обьекту. Типа попытки использовать стринглист не обьявив его, или к несуществующему элементу. Напимер к у вас начинается с 1, а в большинстве списков с нуля, возможно в конце цикла вы обращаетесь за пределы (если они вообще были обьявлены). Может что-то не так с tables?

Мало вероятно что это проблемы незватки памяти но можете попробовать скомпилировать в другой системе.
 
S

semantics

Спасибо, я разобрался - в тексте была объявлена переменная, требующая более 1 ГБ памяти
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!