Ошибки времени выполнения
Опубликовано: 16 Декабря, 2021
Ошибки во время выполнения :
- Ошибка выполнения в программе - это ошибка, которая возникает во время работы программы после успешной компиляции.
- Ошибки времени выполнения обычно называются «ошибками» и часто обнаруживаются в процессе отладки перед выпуском программного обеспечения.
- Когда ошибки времени выполнения возникают после того, как программа была распространена среди общественности, разработчики часто выпускают исправления или небольшие обновления, предназначенные для исправления ошибок.
- Любой желающий может найти в этой статье список проблем, с которыми он может столкнуться, если он новичок.
- При решении проблем на онлайн-платформах можно встретить множество ошибок времени выполнения, которые четко не указаны в сообщении, которое приходит с ними. Существует множество ошибок времени выполнения, таких как логические ошибки , ошибки ввода / вывода, ошибки неопределенного объекта, ошибки деления на ноль и многие другие.
Типы ошибок времени выполнения :
- SIGFPE: SIGFPE - ошибка с плавающей запятой. Это практически всегда вызвано делением на 0 . В основном могут быть три основные причины ошибки SIGFPE, описанные ниже:
- Деление на ноль.
- Операция по модулю по нулю.
- Целочисленное переполнение.
Ниже приведена программа, иллюстрирующая ошибку SIGFPE:
C ++
// C++ program to illustrate
// the SIGFPE error
#include <iostream>
using
namespace
std;
// Driver Code
int
main()
{
int
a = 5;
// Division by Zero
cout << a / 0;
return
0;
}
Выход:
- SIGABRT: это сама ошибка, обнаруженная программой, тогда этот сигнал генерируется с использованием вызова функции abort (). Этот сигнал также используется стандартной библиотекой для сообщения о внутренней ошибке. Функция assert () в C ++ также использует abort () для генерации этого сигнала.
Ниже приведена программа, иллюстрирующая ошибку SIGBRT:
C ++
// C++ program to illustrate
// the SIGBRT error
#include <iostream>
using
namespace
std;
// Driver Code
int
main()
{
// Assigning excessive memory
int
a = 100000000000;
int
* arr =
new
int
[a];
return
0;
}
Выход:
- NZEC: эта ошибка обозначает «Ненулевой код выхода» . Для пользователей C эта ошибка будет сгенерирована, если метод main () не имеет оператора return 0 . Пользователи Java / C ++ могут сгенерировать эту ошибку, если вызовут исключение. Ниже приведены возможные причины появления ошибки NZEC:
- Бесконечная рекурсия или если у вас закончилась память стека.
- Доступ к отрицательному индексу массива.
- ArrayIndexOutOfBounds Exception.
- Исключение StringIndexOutOfBounds.
Ниже приведена программа, иллюстрирующая ошибку NZEC:
Python
# Python program to illustrate
# the NZEC Error
# Driver Code
if
__name__
=
=
"__main__"
:
arr
=
[
1
,
2
]
# Runtime Error
# Array Index out of Bounds
print
(arr[
2
])
Выход:
- SIGSEGV: эта ошибка является наиболее частой и известна как «ошибка сегментации». Он генерируется, когда программа пытается получить доступ к памяти, доступ к которой не разрешен, или пытается получить доступ к области памяти недопустимым способом. Список некоторых из распространенных причин ошибок сегментации:
- Доступ к массиву вне пределов.
- Разыменование указателей NULL.
- Разыменование освобожденной памяти.
- Разыменование неинициализированных указателей.
- Неправильное использование операторов «&» (адрес) и «*» (разыменование).
- Неправильные спецификаторы форматирования в операторах printf и scanf.
- Переполнение стека.
- Запись в постоянную память.
Ниже приведена программа, иллюстрирующая ошибку SIGSEGV:
C ++
// C++ program to illustrate
// the SIGSEGV error
#include <bits/stdc++.h>
using
namespace
std;
// Function with infinite
// Recursion
void
infiniteRecur(
int
a)
{
return
infiniteRecur(a);
}
// Driver Code
int
main()
{
// Infinite Recursion
infiniteRecur(5);
}
Выход:
Способы избежать ошибок во время выполнения :
- Избегайте использования переменных, которые не были инициализированы. В вашей системе они могут быть установлены на 0 , но не на платформе кодирования.
- Проверяйте каждое вхождение элемента массива и убедитесь, что он не выходит за границы.
- Не объявляйте слишком много памяти. Проверьте ограничение памяти, указанное в вопросе.
- Избегайте объявления слишком большого объема памяти стека. Большие массивы следует объявлять глобально вне функции.
- Используйте return в качестве конечного оператора.
- Избегайте ссылок на свободную память или нулевые указатели.
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по доступной для студентов цене и будьте готовы к работе в отрасли. Получите все важные математические концепции для соревновательного программирования с курсом Essential Maths for CP по доступной для студентов цене.
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.