Исключение 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