Причина ошибки времени выполнения в C / C ++
В этой статье мы обсудим причину ошибки времени выполнения и ее решение.
Ошибка выполнения: ошибка времени выполнения в программе - это ошибка, которая возникает во время работы программы после ее успешной компиляции. Ниже приведены некоторые методы определения причины ошибки во время выполнения:
Метод 1. Когда индексу массива присваивается отрицательный индекс, это приводит к недопустимому доступу к памяти во время выполнения ошибки. Ниже приведена программа C ++, иллюстрирующая недопустимый доступ к памяти во время выполнения:
C ++
// C++ program to illustrate invalid // memory access during run-time #include <iostream> using namespace std; // Global declaration int arr[5]; // Driver Code int main() { int answer = arr[-10]; cout << answer; return 0; } |
1736487104
Метод 2: Иногда массив или вектор выходят за пределы своих пределов, что приводит к ошибке выполнения. Ниже приведена программа на C ++, показывающая, что массив выходит за пределы:
C++
// C++ program to illustrate // array runs out of bound #include <iostream> using namespace std; // Driver Code int main() { long n; n = 100000000000; // "n" is out of bound for // the array limit long a[n]; cout << a[1] << " " ; return 0; } |
Выход:
Объяснение:
- Это ошибка индекса за пределами допустимого диапазона.
- Это можно решить, используя размер массива / вектора как в пределах лимита.
Метод 3: некоторые глупые ошибки, возникающие при торопливом кодировании, иногда приводят к ошибкам во время выполнения. Ниже приведена программа на C ++, иллюстрирующая ошибку времени выполнения неназначенными переменными:
C ++
// C++ program to illustrate runtime // error by un-assigned variables #include <iostream> using namespace std; // Driver Code int main() { long long N; // N is assigned garbage value long arr[N]; cin >> N; for ( int i = 0; i < N; i++) { cin >> arr[i]; } for ( int i = 0; i < N; i++) { cout << arr[i] << " " ; } return 0; } |
Выход:
Объяснение:
Вышеупомянутая программа показывает «Плохой доступ к памяти (SIGBUS)», потому что:
- Здесь переменной N присваивается значение мусора, что приводит к ошибке времени выполнения.
- Иногда, поскольку это зависит от компилятора, как он присвоил значение мусора.
- Эту проблему можно решить, объявив arr [N] после сканирования значения переменной n и проверки, является ли оно верхним или нижним пределом индекса массива / вектора.