SIGILL Изключение в Lazarus

След като работи добре за известно време, моят код започна да повдига изключение на SIGILL, когато се използва. Не разбрах документацията. Какво означава изключението SIGILL на практика?

Това е кодът, който предизвиква изключението, бихте ли ми помогнали да посоча защо?

function TfrmPascal.valorElemento(lin, col: integer): integer;
begin
     if lin < 0 then valorElemento:= 0 
     else if col < 0 then valorElemento:= 0
     else if (col=0) or (col = lin) then valorElemento:=1
     else valorElemento:= valorElemento(lin-1, col-1) + valorElemento(lin-1, col);
end; 

person Tiago Duque    schedule 28.04.2015    source източник


Отговори (1)


SIGILL е сигнал, който се издава, когато се срещне незаконна инструкция. Ако кодът във вашия въпрос води до SIGILL, това би предложило едно от следните:

  1. Вашият изпълним файл е повреден.
  2. Вашият компилатор е издал дефектен код.
  3. Опитвате се да изпълните данни, а не код.

Крайният вариант е най-вероятният. Това може да се случи, ако сте отписали края на масив, повредили стека и т.н.

Кодът във въпроса изглежда сам по себе си доста безвреден. Почти сигурно дефектът във вашия код е другаде.

person David Heffernan    schedule 28.04.2015
comment
Възможно ли е SIGILL да е свързан с проблеми с референтните единици? - person Tiago Duque; 28.04.2015
comment
Не знам какво означава това. Мислех, че искаш да знаеш какво е SIGILL. - person David Heffernan; 28.04.2015
comment
Дейвид, благодаря за помощта още веднъж. Изглежда, че това е нещо, свързано с повреда на данните, тъй като не направих промени във файловете и те започнаха да работят отново, след като рестартирах Lazarus. Вашият отговор ми даде добър намек. - person Tiago Duque; 28.04.2015