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

Тема в разделе "Delphi - Система", создана пользователем semantics, 3 июн 2009.

Статус темы:
Закрыта.
  1. semantics

    semantics Гость

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

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

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

    0dayAlgorithm Гость

    Репутация:
    0
    А какой модуль был добавлен - тот после которого все началось?
    А в целом сколько у вас оперативы и какой размер файла подкачки?
     
  3. semantics

    semantics Гость

    Репутация:
    0
    Добавленный модуль я удалил - не помогает.
    Файл подкачки был 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.

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

    semantics Гость

    Репутация:
    0
    Ошибку нашел, но причина непонятна вот процедура -ниже, при открытии закомментированной строки
    // 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;
     
  5. semantics

    semantics Гость

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

    0dayAlgorithm Гость

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

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

    semantics Гость

    Репутация:
    0
    Спасибо, я разобрался - в тексте была объявлена переменная, требующая более 1 ГБ памяти
     
Загрузка...
Похожие Темы - Нехватка виртуальной памяти
  1. nikos
    Ответов:
    63
    Просмотров:
    2.498
Статус темы:
Закрыта.

Поделиться этой страницей