Quais são alguns exemplos de erros de tempo de execução em C ++?


Melhor resposta

Existem duas definições possíveis:

Em termos gerais ,

Um erro em tempo de execução é uma operação inválida que ocorre durante a execução de um programa que não pode ser detectado em tempo de compilação.

Por exemplo, considere isso

#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;

}

Este programa é “bem formado”: ​​o compilador pode traduzi-lo com sucesso e o sistema operacional o executa com êxito.

E se você digitar dois inteiros separados por espaço quando necessário, ele imprime o quociente integral como deveria.

Mas, se você digitar “0” como um segundo número, ou se você digitar algo como qualquer coisa que t não é um número ou não pode ser analisado como um número, você vai acabar com uma divisão inteira por 0. Algo que a CPU não pode fazer e para o qual um sinal de interrupção é emitido esperando que algo reaja a isso. (A reação padrão do sistema operacional é passar o sinal para o programa, onde o manipulador de sinal padrão CRT chama “terminate ()”.

Em C ++ específico termo : um erro de tempo de execução é qualquer instância de qualquer classe derivada de std::runtime\_error dada a uma instrução throw .

Qualquer função que descubra uma operação que não pode ser concluída conforme o esperado deve lançar uma exceção como essa, para permitir que o chamador gerencie o erro.

Agora, vamos tentar ser mais “gentis”:

#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);

}

}

}

Você pode veja a função div realmente fazendo a divisão. Ele pode filtrar o caso do divisor “0”, mas não pode corrigir por si mesmo o problema (ele não tem ideia sobre “por que” o divisor é 0, então não pode realizar nenhuma ação específica: ele “relata” sua falha na forma de um exceção.

O main anterior está agora dentro de um bloco try . Se nenhuma exceção for lançada, ele se comporta como o anterior.

Se uma exceção for lançada, o escopo é encerrado, mas o bloco catch irá imprimir uma mensagem informativa, limpar a "entrada incorreta" (ele redefine os sinalizadores de estado - portanto remover qualquer fail bit no cin estado, do que ignorar os “caracteres burros” até um ponto razoável - o próximo \ n) e deixe o loop de agrupamento ser executado novamente.

Resposta

Erros de tempo de execução são erros que ocorrem quando o programa está sendo executado. Eles podem ser de tipos diferentes, incluindo:

  • Erros lógicos: quando o programa gera uma saída diferente da saída esperada. Por exemplo - você faz um programa para somar dois números, mas por engano dá um sinal - em vez do sinal +.
  • Vazamentos de memória: O programa usa RAM continuamente e evita que os locais da memória sejam utilizados para outras tarefas uma vez seu trabalho está terminado. Executar loops infinitos ou não desalocar a memória usada pode causá-los.
  • Falhas: podem ser devido a muitos motivos como:
  • Referenciar arquivos ausentes. Você deseja exibir uma imagem, mas fornecer o caminho errado para ela; o programa não a encontrará e travará.
  • Dividindo as coisas por zero Dizemos simplesmente que qualquer coisa dividida por 0 não está definida. Os programas não são tão inteligentes e enlouquecem.
  • Fornecendo a opinião errada. Já tentou inserir um caractere em uma variável inteira durante a execução do programa? Se sim, você sabe o que acontece.etc.

Espero que tenha ajudado…

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *