Наткнулся тут на один пример:
Код: Выделить всё
{$R-}
uses crt;
const nmax=20;
type
Tmas=^TTmas;{одна строка матрицы}
TTmas=array[1..1] of integer;
Tmatr=^TTmatr;{матрица-массив указателей на строки}
TTmatr=array[1..1] of Tmas;
var
a:Tmatr;
n,m,i,j,k:integer;
f:boolean;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' m=');
readln(m);
until m in [1..nmax];
getmem(a,sizeof(TTmatr)*n);{выделяем память под указатели на строки}
for i:=1 to m do
getmem(a^[i],sizeof(integer)*m);{для каждой строки память для хранения данных}
writeln ('Исходная матрица:');
for i:=1 to n do
begin
for j:=1 to m do
begin
repeat
a^[i]^[j]:=random(50)-25;
until a^[i]^[j]<>0;{создаем матрицу без нолей}
write(a^[i]^[j]:4);
end;
writeln;
end;
writeln;
for i:=1 to n do
begin
j:=m;
k:=0;
while(j>=1)and(k=0) do
if a^[i]^[j]<0 then k:=j
else j:=j-1;
if k<>0 then a^[i]^[j]:=0;{замена последнего отр. на 0}
if k=m then f:=true; {если все}
end;
writeln('Замена последних отрицательных в строках на 0');
for i:=1 to n do
begin
for j:=1 to m do
write(a^[i]^[j]:4);
writeln;
end;
for i:=1 to n do
freemem(a^[i],sizeof(integer)*m); {освобождаем память в обратном порядке, сначала удалим строки}
freemem(a,sizeof(TTmatr)*n); {потом указатели на них}
readln
end.
Работает без проблем, попробовал к своему коду применить, вместо
написать:
Все стало работать без ошибок External SIGSEV.
От сюда собственно и вопрос в чем глобальное отличие
array of integer от
array [0..0] of integer?