Errors de temps d'execució:
- Un error d'execució en un programa és un error que es produeix mentre el programa s'executa després d'haver estat compilat correctament.
- Els errors d'execució s'anomenen comunament com a errors i sovint es troben durant el procés de depuració abans de llançar el programari.
- Quan es produeixen errors en temps d'execució després que un programa s'hagi distribuït al públic, els desenvolupadors sovint publiquen pedaços o petites actualitzacions dissenyades per corregir els errors.
- Qualsevol pot trobar la llista de problemes que es poden trobar si és un principiant Aquest article .
- Mentre es resolen problemes a les plataformes en línia, es poden enfrontar molts errors de temps d'execució, que no s'especifiquen clarament al missatge que els acompanya. Hi ha una varietat d'errors d'execució que es produeixen, com ara errors lògics , Errors d'entrada/sortida , errors d'objecte no definits , divisió per zero errors , i molts més.
Tipus d'errors en temps d'execució:
- SIGFPE: SIGFPE és un punt flotant error. Pràcticament sempre és causada per a divisió per 0 . Pot haver-hi principalment tres causes principals d'error SIGFPE descrites de la següent manera:
- Divisió per zero.
- Operació del mòdul per zero.
- Desbordament d'enter.
// 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: Es tracta d'un error en si és detectat pel programa, llavors aquest senyal es genera mitjançant la trucada a avortar () funció. Aquest senyal també l'utilitza la biblioteca estàndard per informar d'un error intern. afirmar () funció en C++ també utilitza abort() per generar aquest senyal. A continuació es mostra el programa per il·lustrar l'error 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: Aquest error denota Codi de sortida diferent de zero . Per C usuaris, aquest error es generarà si el mètode main(). no té retorn 0 declaració. Java Els usuaris de /C++ podrien generar aquest error si llançaven una excepció. A continuació es mostren les possibles raons per obtenir un error NZEC:
- Recursió infinita o si us quedeu sense memòria de pila.
- S'accedeix a l'índex de matriu negatiu.
- ArrayIndexOutOfBounds Excepció.
- StringIndexOutOfBounds Excepció.
#include #include using namespace std; int main() { vector
arr = {1, 2}; try { // Error intencional: Accés a un element fora de límits<< 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: Aquest error és l'error més comú i es coneix com Falla de segmentació . Es genera quan el programa intenta accedir a una memòria a la qual no es permet l'accés o intenta accedir a una ubicació de memòria d'una manera no permesa. Llista d'alguns dels motius habituals dels errors de segmentació:
- Accés a una matriu fora de límits.
- Desreferenciació de punters NULL.
- Desreferenciació de la memòria alliberada.
- Desreferenciació de punters no inicialitzats.
- Ús incorrecte de la & (adreça de) i * operadors (desreferenciació).
- Especificadors de format inadequats a les sentències printf i scanf.
- Desbordament de pila.
- Escriptura a la memòria de només lectura.
// 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.>
Maneres d'evitar errors en temps d'execució:
- Eviteu utilitzar variables que no s'han inicialitzat. Aquests es poden establir a 0 al vostre sistema, però no a la plataforma de codificació.
- Comproveu cada ocurrència d'un element de matriu i assegureu-vos que no estigui fora dels límits.
- Eviteu declarar massa memòria. Comproveu el límit de memòria especificat a la pregunta.
- Eviteu declarar massa Memòria de pila . Les matrius grans s'han de declarar globalment fora de la funció.
- Utilitzeu return com a declaració final.
- Eviteu fer referència memòria lliure o punters nuls .