1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

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

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

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

    semantics Гость

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

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

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

    0dayAlgorithm Гость

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

    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.

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

    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;
     
  5. semantics

    semantics Гость

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

    0dayAlgorithm Гость

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

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

    semantics Гость

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

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