СквознякЯ предполагал, что fpc (или fp) использует ppc386 при компиляции, поэтому искал файл настроек с директивами, которые можно прописать и в командной строке. Как оказалось, fp и ppc386 - два независимых приложения.
Sergei I. GorelkinВидимо, речь все таки идет о ключе ключе -WС. Да, теперь компилируется.
Но при компиляции компилером версии 1.0.10 возникла другая ошибка 203. Переполнение кучи.
Runtime error 203 at адрес
и еще несколько адресов ниже
указана строка с кодом GetMem(ARRM[I], sizeof(ARRM[I]^));
При использовании компилятора версии 2.4.4 такой ошибки не возникает. Но нужно разобраться именно с ошибкой компилятора более ранней версии.
Компилирую как и раньше командной строкой через ppc386.
Настройки .bat файла:
\FPC\2.4.4\bin\i386-win32\ppc386 -Sd -Sg -Un -O1 -Xs -gl %1 -FU<директория модулей> -Foc:<директория модулей> -WC -WN
При запуске программы предполагается ввод большого числа(например, 20000), так чтобы выполнилась часть кода в except.
Вот код:
- Код: Выделить всё
program Project4;
//uses Windows, SysUtils, dos;
{ H+}
{ mode Delphi}
{ apptype console}
const
NNMAT=30000;{8100;}{4096;}{16380;}
NNARR=30000;
type
MAS = array [0..NNMAT-1] of Double;
ARR = ^MAS;
MAS2 = array [0..NNARR] of ARR;
PMAS2 = ^MAS2;
var {-------------------------------}
NMAT0, NMAT: INTEGER;
ARRM: array [0..NNARR] of ARR;
ARR0: ARR;
GE:DWORD;
procedure MAT_PRED(N:INTEGER);
var
NN, I: LONGINT;
begin
NN:= SQR(N);
I:= 0;
NMAT:= 0;
while (NMAT < NN) AND (I < NNARR) DO
begin
try
GetMem(ARRM[I], sizeof(ARRM[I]^));
//sizeof(Double)*NNMAT
except
Writeln('It was GOTO',#$20,I,#$20,NMAT);
Dec(NMAT);
end;
Inc(I);
Inc(NMAT, NNMAT);
// writeln(I,' ',NMAT,' '{,MEMAVAIL,' ',MAXAVAIL});
end;
NMAT0:= NMAT;
Writeln(I,' ',NMAT0);
end;{MAT_PRED}
var
N: INTEGER;
begin
WRITEln('N=');
READLN(N);
MAT_PRED(N);
WRITELN('Filled Memory: ',SQRT(NMAT0):9:3);
READLN;
end.