logo

Vykdymo laiko klaidos

Vykdymo laiko klaidos:

  • Programos vykdymo klaida yra klaida, kuri atsiranda sėkmingai sukompiliavus programai veikiant.
  • Vykdymo laiko klaidos paprastai vadinamos klaidas ir dažnai aptinkami derinimo proceso metu prieš išleidžiant programinę įrangą.
  • Kai viešai išplatinus programą atsiranda vykdymo klaidų, kūrėjai dažnai išleidžia pataisymus arba nedidelius atnaujinimus, skirtus klaidoms ištaisyti.
  • Kiekvienas gali rasti problemų, su kuriomis gali susidurti, sąrašą, jei yra pradedantysis Šis straipsnis .
  • Sprendžiant problemas internetinėse platformose galima susidurti su daugybe veikimo laiko klaidų, kurios nėra aiškiai nurodytos su jomis pateikiamame pranešime. Yra įvairių vykdymo klaidų, tokių kaip loginių klaidų , Įvesties/išvesties klaidos , neapibrėžtos objekto klaidos , dalyba iš nulio klaidų , ir daug daugiau.

Vykdymo laiko klaidų tipai:

  • SIGFPE: SIGFPE yra a slankusis kablelis klaida. Jį praktiškai visada sukelia a padalijimas iš 0 . Iš esmės gali būti trys pagrindinės SIGFPE klaidos priežastys, aprašytos taip:
    1. Dalyba iš nulio.
    2. Modulo Operation by Zero.
    3. Sveikasis skaičius perpildymas.
    Žemiau yra programa, iliustruojanti SIGFPE klaidą:C++
    // 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; }>
    Java
    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.');  }  } }>
    Python3
    # 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()>
    C#
    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
    // JavaScript program to demonstrate division by zero behavior // Perform division by zero let result = 5 / 0; // Print the result console.log(result);>
    Išvestis:
  • SIGABRT: Programa aptinka pačią klaidą, tada šis signalas generuojamas naudojant skambutį į nutraukti () funkcija. Šį signalą taip pat naudoja standartinė biblioteka, kad praneštų apie vidinę klaidą. tvirtinti () funkcija in C++ taip pat naudoja abort() šiam signalui generuoti. Žemiau yra programa, iliustruojanti SIGBRT klaidą: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; }>
    Java
    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>
    Python3
    # 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
    // 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();>
    Išvestis:
  • NZEC: Ši klaida reiškia Nulinis išėjimo kodas . Dėl C vartotojų, ši klaida bus sugeneruota, jei pagrindinis() metodas grąžos neturi 0 pareiškimas. Java /C++ vartotojai gali sukurti šią klaidą, jei padarys išimtį. Toliau pateikiamos galimos NZEC klaidos priežastys:
    1. Begalinė rekursija arba jei baigiasi kamino atmintis.
    2. Pasiekiamas neigiamas masyvo indeksas.
    3. ArrayIndexOutOfBounds išimtis.
    4. StringIndexOutOfBounds išimtis.
    Žemiau yra programa, iliustruojanti NZEC klaidą:C++
    #include  #include  using namespace std; int main() {  vector arr = {1, 2};  try { // Intentional Error: Prieiga prie elemento už ribų 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>
    Java
    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
    # 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
    // 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]);>
    Išvestis:
  • SIGSEGV: Ši klaida yra labiausiai paplitusi klaida ir yra žinoma kaip Segmentacijos gedimas . Jis generuojamas, kai programa bando pasiekti atmintį, kuriai neleidžiama, arba bando pasiekti atminties vietą neleistinu būdu. Kai kurių dažniausiai pasitaikančių segmentavimo gedimų priežasčių sąrašas yra toks:
    1. Prieiga prie masyvo už ribų.
    2. NULL nuorodų panaikinimas.
    3. Atlaisvintos atminties panaikinimas.
    4. Neinicijuotų rodyklių nuorodų panaikinimas.
    5. Neteisingas naudojimas & (adresas) ir * (nuorodų panaikinimo) operatoriai.
    6. Netinkamos formatavimo specifikacijos printf ir scanf teiginiuose.
    7. Kamino perpildymas.
    8. Rašymas į tik skaitymo atmintį.
    Žemiau yra programa, iliustruojanti SIGSEGV klaidą:C++
    // 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); }>
    Java
    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
    # 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.>
    C#
    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);  } }>
    JavaScript
    // 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.>
    Išvestis:

Būdai, kaip išvengti vykdymo laiko klaidų:

  • Venkite naudoti kintamuosius, kurie nebuvo inicijuoti. Jie gali būti nustatyti 0 jūsų sistemoje, bet ne kodavimo platformoje.
  • Patikrinkite kiekvieną masyvo elemento pasireiškimą ir įsitikinkite, kad jis nėra už ribų.
  • Venkite skelbti per daug atminties. Patikrinkite klausime nurodytą atminties limitą.
  • Venkite deklaruoti per daug Stack atmintis . Dideli masyvai turėtų būti deklaruojami globaliai už funkcijos ribų.
  • Naudokite return kaip pabaigos teiginį.
  • Venkite nuorodų laisvos atminties arba nulinės rodyklės .