Hvad er nogle eksempler på kørselsfejl i C ++?


Bedste svar

Der er to mulige definitioner:

I generelle vilkår ,

En runtime-fejl er en ugyldig handling, der sker under udførelsen af ​​et program, der på kompileringstidspunktet ikke kan detekteres.

Overvej for eksempel dette

#incude

int main()

{

int a=0, b=0;

std::cout << "getting the quotient. \n Two numbers, please" << std::endl;

std::cin >> a >> b;

auto z = a/b;

std::cout << "the quotient is" << z << std::endl;

}

Dette program er "velformet": compileren kan med succes oversætte det og OS udfører det med succes.

Og hvis du skriver to plads-adskilte heltal, når det kræves, udskriver det den integrerede kvotient, som den skal gøre.

Men hvis du skriver "0" som et andet tal, eller hvis du skriver noget som en hvilken som helst ting tha t er ikke et tal eller kan ikke parses som et tal, ender du med et heltal med 0. noget CPUen ikke kan gøre, og for hvilket der udsendes et afbrydesignal, der forventer, at noget reagerer på det. (Standardreaktionen fra operativsystemet er at sende signalet til programmet, hvor CRT-standardsignalbehandleren kalder "terminate ()".

I Specifik C ++ udtryk : En runtime-fejl er uanset hvilken forekomst af en klasse, der stammer fra std::runtime\_error givet til en throw -erklæring.

Uanset hvilken funktion der opdager en operation, der ikke kan afsluttes som forventet, skal det kaste en undtagelse som den, så opkalderen kan styre fejlen.

Lad os nu prøve at være mere "blide":

#include

#include

#include

class divide\_by\_zero: public std::runtime\_error

{ public: using std::runtime\_error::runtime\_error; };

// filter a divide by zero runtime error

auto div(int a, int b)

{

if(!b)

{ throw divide\_by\_zero("attempt to divide by zero"); }

return a/b;

}

// clear a stream status, and discard input up to a "\n"

void discard\_input(std::istream& s)

{

s.clear();

s.ignore(std::numeric\_limits::max(),"\n");

}

int main()

{

for(;;)

{

try

{

int a=0; b=0;

std::cout << "Getting the quotient: Two numbers, please" << std::endl;

std::cin >> a >> b;

auto z = div(a,b);

std::cout << "The quotient is " << z << std::endl;

return 0;

}

catch(std::exception& e) //whatever exception

{

std::cout << "Error in computation: " << e.what() << "\n";

std::cout << "Bad input - retry!" << std::endl;

discard\_input(std::cin);

}

}

}

Du kan se div -funktionen, der faktisk udfører divisionen. Det kan filtrere "0" divisor case, men kan ikke i sig selv rette problemet (det har ingen anelse om "hvorfor" divisor er 0, så det kan ikke tage nogen specifik handling: det "rapporterer" det er fiasko i form af en undtagelse.

Den forrige main er nu inde i en try -blok. Hvis der ikke kastes nogen undtagelser, opfører den sig som den foregående.

Hvis en undtagelse kastes, afsluttes omfanget, men fangstblokken udskriver en informationsbesked, rydder op i "dårlig input" (det nulstiller statens flag - således fjernelse af den fail bit i cin tilstand, end ignorere de "stumme tegn" op til et rimeligt punkt - det næste \ n) og lad omviklingssløjfen genkøre.

Svar

Runtime-fejl er fejl, der opstår, når programmet kører. De er måske af forskellige typer, som inkluderer:

  • Logiske fejl: Når programmet genererer en output, der er forskellig fra den forventede output. F.eks. - Du laver et program til tilføjelse af to numre, men ved en fejl giver du et - tegn i stedet for + - tegnet.
  • Hukommelseslækage: Programmerne bruger løbende op RAM og forhindrer hukommelsesplaceringer i at blive brugt til andre opgaver en gang deres arbejde er afsluttet. At køre uendelige sløjfer eller ikke fordele brugt hukommelse kan forårsage dem.
  • Nedbrud: De kan skyldes mange grunde som:
  • Henvisning til manglende filer. Du vil vise et billede, men angive den forkerte sti til det, programmet finder det ikke og går ned.
  • Deling af ting med nul. Vi siger simpelthen, at noget divideret med 0 ikke er defineret. Programmer er ikke så smarte og skifter.
  • At give det forkerte input. Har du nogensinde prøvet at indtaste et tegn i en heltalsvariabel under programkørslen? Hvis ja, ved du hvad der sker.osv.

Håber det hjalp…

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *