Errores de tiempo de ejecución:
- Un error de tiempo de ejecución en un programa es un error que ocurre mientras el programa se ejecuta después de haber sido compilado exitosamente.
- Los errores de tiempo de ejecución se denominan comúnmente insectos y a menudo se encuentran durante el proceso de depuración antes de que se lance el software.
- Cuando se producen errores de tiempo de ejecución después de que un programa se ha distribuido al público, los desarrolladores suelen publicar parches o pequeñas actualizaciones diseñadas para corregir los errores.
- Cualquiera puede encontrar la lista de problemas que podrían enfrentar si son principiantes en Este artículo .
- Al resolver problemas en plataformas en línea, se pueden enfrentar muchos errores de tiempo de ejecución, que no se especifican claramente en el mensaje que los acompaña. Hay una variedad de errores de tiempo de ejecución que ocurren, como errores lógicos , Errores de entrada/salida , errores de objetos indefinidos , errores de división por cero , y muchos más.
Tipos de errores de tiempo de ejecución:
- SIGFPE: SIGFPE es un punto flotante error. Prácticamente siempre es causado por un división por 0 . Puede haber principalmente tres causas principales del error SIGFPE que se describen a continuación:
- División por cero.
- Operación Módulo por Cero.
- Desbordamiento de enteros.
// 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 un error en sí mismo detectado por el programa y luego esta señal se genera mediante una llamada a abortar() función. Esta señal también la utiliza la biblioteca estándar para informar un error interno. afirmar() funcionar en C++ también usa abort() para generar esta señal. A continuación se muestra el programa para ilustrar el 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();>
- CENZ: Este error denota Código de salida distinto de cero . Para C usuarios, este error se generará si el método principal() no tiene retorno 0 declaración. Java Los usuarios de /C++ podrían generar este error si lanzan una excepción. A continuación se detallan las posibles razones por las que aparece el error NZEC:
- Recursión infinita o si te quedas sin memoria de pila.
- Se accede al índice de matriz negativo.
- Excepción ArrayIndexOutOfBounds.
- Excepción StringIndexOutOfBounds.
#include #include using namespace std; int main() { vector
arreglo = {1, 2}; try { // Error intencional: acceder a un elemento fuera de los límites 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: Este error es el más común y se conoce como Fallo de segmentación . Se genera cuando el programa intenta acceder a una memoria a la que no se le permite acceder o intenta acceder a una ubicación de memoria de una manera que no está permitida. La lista de algunas de las razones comunes de los errores de segmentación es:
- Acceder a una matriz fuera de límites.
- Desreferenciación de punteros NULL.
- Desreferenciación de la memoria liberada.
- Desreferenciación de punteros no inicializados.
- Uso incorrecto del & (dirección de) y * (desreferenciación) operadores.
- Especificadores de formato incorrectos en declaraciones printf y scanf.
- Desbordamiento de pila.
- Escritura en memoria de sólo 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.>
Formas de evitar errores de tiempo de ejecución:
- Evite el uso de variables que no hayan sido inicializadas. Estos pueden establecerse en 0 en su sistema pero no en la plataforma de codificación.
- Verifique cada aparición de un elemento de la matriz y asegúrese de que no esté fuera de los límites.
- Evite declarar demasiada memoria. Verifique el límite de memoria especificado en la pregunta.
- Evite declarar demasiado Memoria de pila . Las matrices grandes deben declararse globalmente fuera de la función.
- Utilice return como declaración final.
- Evite hacer referencias memoria libre o punteros nulos .