External sigfpe lazarus что за ошибка

Ошибка код завершения 1 лазарус

В POSIX-системах, SIGFPE — сигнал, посылаемый процессу, при попытке выполнения ошибочной арифметической операции.

Этимология [ править | править код ]

SIG — общий префикс, сигналов, FPE — аббревиатура англ. floating-point exception — исключение в операции с плавающей запятой. На самом деле, SIGFPE используется и для целочисленной арифметики, название же сохраняется для обеспечения обратной совместимости кода.

Использование [ править | править код ]

SIGFPE может быть послан процессу по ряду причин. Самая распространенная из них — переполнение типа данных в результате неожиданно больших (или малых) значений входных данных и/или ошибки дизайна программы.

SIGFPE может быть перехвачен или проигнорирован. Игнорирование SIGFPE в некоторых случаях может привести к непредсказуемым результатам — программа может зациклиться в попытке выполнить ошибочную операцию. Если SIGFPE не является результатом арифметической операции (а, например, послан с помощью системного вызова kill() ), то такое игнорирование вполне безопасно.

При делении SIGFPE вызывает не только равный нулю делитель — на некоторых платформах (включая x86), целое деление INT_MIN, самого малого (отрицательного) целого числа, на (−1) не может быть выполнено, поскольку положительное число с этим модулем непредставимо (при INT_MIN = (−2147483648), INT_MAX = 2147483647).

У меня возникла проблема в моем проекте Lazarus: каждый раз, когда я хочу использовать функцию, она выдает указанную выше ошибку ( External: SIGSEGV ). Я не знаю, что это значит, но некоторые отладки показали мне, что это код, вызывающий ошибку:

2 ответа

3 Решение kludg [2015-11-28 13:41:00]

Динамические массивы, такие как TStringArray = array of string; основаны на нуле; ваш код использует его как 1-based и повышает нарушение прав доступа.

Вы должны заменить i := 1; по i := 0;

К второй проблеме, это потому, что вы присоединяетесь к индексу i, который в начале — 1, поэтому у вас есть проблема, диапазон массива определяется «длиной — 1», поэтому, если ваша длина равна 1, то ваш диапазон равен 0. Поэтому для решения проблемы в вашем цикле for вы должны поставить Result[i-1] := s; например, вы получаете индекс, который вы действительно хотите.

procedure TForm1.Button1Click(Sender: TObject);
var a, b,c:integer;
begin
a:=5;
b:=-7;
c:=9;

if (a>0) then
Label1.caption:=floattostr(sqr(a))
else
Label1.caption:=floattostr(Exp(4*Ln(a)));

if (b>0) then
Label2.caption:=floattostr(sqr(b))
else
Label2.caption:=floattostr(Exp(4*Ln(b)));//50строка

if (c>0) then
Label3.caption:=floattostr(sqr(c))
else
Label3.caption:=floattostr(Exp(4*Ln(c)));
end;
end.
external sigfpe lazarus что за ошибка

Источники:

https://window-10.ru/external-sigfpe-lazarus-chto-za-oshibka/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: