Chyby za běhu:
- Runtime error v programu je chyba, která nastane, když je program spuštěn po úspěšné kompilaci.
- Runtime chyby se běžně nazývají hmyz a jsou často nalezeny během procesu ladění před vydáním softwaru.
- Když se po distribuci programu veřejnosti objeví chyby za běhu, vývojáři často vydávají záplaty nebo malé aktualizace určené k opravě chyb.
- Kdokoli může najít seznam problémů, se kterými se může potýkat, pokud je začátečník tento článek .
- Při řešení problémů na online platformách lze čelit mnoha chybám při běhu, které nejsou jasně specifikovány ve zprávě, která je s nimi dodávána. Existuje celá řada runtime chyb, které se vyskytují jako např logické chyby , Chyby vstupu/výstupu , nedefinované chyby objektu , dělení nulovými chybami , a mnoho dalších.
Typy běhových chyb:
- SIGFPE: SIGFPE je a plovoucí bod chyba. Prakticky vždy je způsobena a dělení 0 . Chyba SIGFPE může mít tři hlavní příčiny popsané následovně:
- Dělení nulou.
- Modulo Operation by Zero.
- Přetečení celého čísla.
// C++ program to illustrate // the SIGFPE error #include using namespace std; // Driver Code int main() { int a = 5; // Division by Zero cout << a / 0; return 0; }>
public class Main { public static void main(String[] args) { int a = 5; try { // Division by Zero System.out.println(a / 0); } catch (ArithmeticException e) { // Handle the ArithmeticException System.out.println('Error: Division by zero is not allowed.'); } } }>
# Python program to illustrate # the ZeroDivisionError # Driver Code def main(): a = 5 try: # Division by Zero print(a / 0) except ZeroDivisionError as e: print(f'Error: {e}') if __name__ == '__main__': main()>
using System; class Program { static void Main() { int a = 5; try { // Division by Zero Console.WriteLine(a / 0); } catch (DivideByZeroException ex) { // Handling DivideByZeroException Console.WriteLine('Error: ' + ex.Message); } Console.ReadLine(); } }>
// JavaScript program to demonstrate division by zero behavior // Perform division by zero let result = 5 / 0; // Print the result console.log(result);>
- SIGABRT: Jedná se o chybu, kterou program sám detekuje a tento signál je generován pomocí call to přerušit() funkce. Tento signál také používá standardní knihovna k hlášení vnitřní chyby. tvrdit() funkce v C++ také používá abort() ke generování tohoto signálu. Níže je uveden program pro ilustraci chyby SIGBRT:C++
// C++ program to illustrate // the SIGBRT error #include using namespace std; // Driver Code int main() { // Assigning excessive memory int a = 100000000000; int* arr = new int[a]; return 0; }>
public class Main { public static void main(String[] args) { try { // Assigning excessive memory int a = 1000000000; int[] arr = new int[a]; } catch (OutOfMemoryError e) { // Catch the OutOfMemoryError System.err.println('Caught OutOfMemoryError: ' + e.getMessage()); } } } //This code is contributed by Adarsh>
# Python program to illustrate # the MemoryError # Driver Code def main(): try: # Attempting to allocate excessive memory a = 100000000000 arr = [0] * a except MemoryError as e: print(f'Error: {e}') if __name__ == '__main__': main()>
// JavaScript program to illustrate the MemoryError // Driver Code function main() { try { // Attempting to allocate excessive memory const a = 100000000000; const arr = new Array(a).fill(0); } catch (e) { console.log('Error: ' + e.message); } } main();>
- NZEC: Tato chyba označuje Nenulový výstupní kód . Pro C uživatelům, bude tato chyba generována, pokud metoda main(). nemá návratnost 0 prohlášení. Jáva Uživatelé /C++ by mohli vygenerovat tuto chybu, pokud by vyvolali výjimku. Níže jsou uvedeny možné důvody pro získání chyby NZEC:
- Infinite Recursion nebo pokud vám dojde paměť zásobníku.
- Přistupuje se k zápornému indexu pole.
- Výjimka ArrayIndexOutOfBounds.
- Výjimka StringIndexOutOfBounds.
#include #include using namespace std; int main() { vector
arr = {1, 2}; try { // Záměrná chyba: Přístup k prvku mimo meze cout<< arr.at(2) << endl; // Accessing index 2 which is out of bounds } catch (const out_of_range& e) { cout << 'Error the index is out of bound'<< endl; // Handle the out_of_range exception } return 0; } //This code is contrbiuted by Adarsh> public class Main { public static void main(String[] args) { int[] arr = {1, 2}; // Intentional Error: Accessing an element out of bounds System.out.println(arr[2]); // Error: Accessing index 2 which is out of bounds } } //this code is contributed by Utkarsh.>
# 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])>
// JavaScript program to illustrate // the error similar to NZEC Error // Driver Code let arr = [1, 2]; // Runtime Error // Array Index out of Bounds console.log(arr[2]);>
- SIGSEGV: Tato chyba je nejčastější chybou a je známá jako Porucha Segmentace . Vygeneruje se, když se program pokusí o přístup k paměti, ke které není povolen přístup, nebo se pokusí o přístup k místu paměti způsobem, který není povolen. Seznam některých běžných důvodů chyb segmentace:
- Přístup k poli mimo meze.
- Dereferencování ukazatelů NULL.
- Dereferencování uvolněné paměti.
- Dereferencování neinicializovaných ukazatelů.
- Nesprávné použití & (adresa) a * (dereferencující) operátory.
- Nesprávné formátovací specifikátory v příkazech printf a scanf.
- Přetečení zásobníku.
- Zápis do paměti pouze pro čtení.
// C++ program to illustrate // the SIGSEGV error #include using namespace std; // Function with infinite // Recursion void infiniteRecur(int a) { return infiniteRecur(a); } // Driver Code int main() { // Infinite Recursion infiniteRecur(5); }>
import java.util.*; public class Main { // Function with infinite Recursion static void infiniteRecur(int a) { // Recursively call the function without a base case infiniteRecur(a); } // Driver Code public static void main(String[] args) { // Infinite Recursion infiniteRecur(5); } } //This code is contributed by Monu.>
# Python program to illustrate # the SIGSEGV error # Function with infinite # Recursion def infiniteRecur(a): return infiniteRecur(a) # Driver Code if __name__ == '__main__': # Infinite Recursion infiniteRecur(5) #This code is contributed by Utkarsh.>
using System; class Program { // Function with infinite Recursion static void InfiniteRecur(int a) { // Recursively calling the function InfiniteRecur(a); } // Driver Code static void Main() { // Infinite Recursion InfiniteRecur(5); } }>
// Function with infinite Recursion function infiniteRecur(a) { // Recursively call the function without a base case infiniteRecur(a); } // Infinite Recursion infiniteRecur(5); // Note: JavaScript does not have tail-call optimization, // so running this code will eventually lead to a maximum call stack size exceeded error.>
Způsoby, jak se vyhnout chybám za běhu:
- Vyhněte se použití proměnných, které nebyly inicializovány. Tyto mohou být nastaveny na 0 na vašem systému, ale ne na kódovací platformě.
- Zkontrolujte každý jednotlivý výskyt prvku pole a ujistěte se, že není mimo hranice.
- Vyhněte se deklarování příliš velké paměti. Zkontrolujte limit paměti uvedený v otázce.
- Vyhněte se přílišnému deklarování Zásobník paměti . Velká pole by měla být deklarována globálně mimo funkci.
- Jako koncový příkaz použijte return.
- Vyhněte se odkazování volná paměť nebo nulové ukazatele .