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

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

semantics

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

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

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

0dayAlgorithm

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

semantics

Гость
#3
Добавленный модуль я удалил - не помогает.
Файл подкачки был 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

Гость
#4
Ошибку нашел, но причина непонятна вот процедура -ниже, при открытии закомментированной строки
// 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:old 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

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

0dayAlgorithm

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

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

semantics

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