Почему a%b производит SIGFPE, когда b является нулем?

Вы абсолютно правы в этом отношении. В небольших тривиальных программах, где переменная должна существовать до самой смерти программы, нет реальной выгоды для освобождения памяти.

Фактически, я когда-то участвовал в проекте, где каждое выполнение программы было очень сложным, но относительно недолгим, и было принято решение просто выделять память и не дестабилизировать проект, совершая ошибки, освобождая его.

Тем не менее, в большинстве программ это на самом деле не вариант, или это может привести к нехватке памяти.

22
задан Jim Balter 14 October 2017 в 04:17
поделиться

2 ответа

Операция запускает SIGFPE :

SIG - общий префикс для сигнала имена; FPE - это аббревиатура от исключение с плавающей запятой. Хотя SIGFPE не обязательно включает арифметика с плавающей запятой, нет способ изменить название без нарушение обратной совместимости.

GDB говорит об этом немного яснее и называет это «арифметическим исключением»:

(gdb) run
Starting program: /home/emil/float

Program received signal SIGFPE, Arithmetic exception.
0x0804837d in main () at float.c:4
4           int c=a%b;
33
ответ дан 29 November 2019 в 04:40
поделиться

Взгляните на эту страницу .

Часть, имеющая отношение к вашему вопросу:

SIG - это общий префикс для имен сигналов; FPE - это аббревиатура от исключения с плавающей запятой. Хотя SIGFPE не обязательно включает арифметику с плавающей запятой, нет способа изменить его имя без нарушения обратной совместимости.

9
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: