C ++의 런타임 오류의 예는 무엇인가요?


최상의 답변

가능한 정의는 다음 두 가지입니다.

일반 용어 ,

런타임 오류는 컴파일 시간에 감지 할 수없는 프로그램 실행 중에 발생하는 잘못된 작업입니다.

예를 들어

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

}

이 프로그램은 "잘 형성되었습니다": 컴파일러가 성공적으로 번역 할 수 있으며 OS가 성공적으로 실행합니다.

필요할 때 공백으로 구분 된 정수 두 개를 입력하면 예상대로 정수 몫이 출력됩니다.

하지만 입력하면 두 번째 숫자로 "0"을 입력하거나 어떤 식 으로든 입력하면 t는 숫자가 아니거나 숫자로 구문 분석 할 수없는 경우 0으로 정수 나누기로 끝납니다. CPU가 수행 할 수없는 작업과 이에 대한 반응을 예상하여 인터럽트 신호가 방출되는 작업입니다. (OS의 표준 반응은 신호를 프로그램에 전달하는 것입니다. 여기서 CRT 기본 신호 핸들러는 "terminate ()"를 호출합니다.

In 특정 C ++) 용어 : 런타임 오류는 throw 문에 주어진 std::runtime\_error에서 파생 된 모든 클래스의 인스턴스입니다. >

어떤 함수가 예상대로 완료 할 수없는 작업을 발견하면 호출자가 실수를 관리 할 수 ​​있도록 이와 같은 예외가 발생해야합니다.

이제보다 "부드럽게"되도록 노력하겠습니다.

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

}

}

}

실제로 나누기를 수행하는 div 함수를 참조하십시오. "0"제수 사례를 필터링 할 수 있지만 자체적으로 문제를 해결할 수는 없습니다 ( "왜"제수가 0인지에 대한 단서가 없으므로 특정 조치를 취할 수 없습니다. "보고"합니다. 예외입니다.

이전 main는 이제 try 블록 내에 있습니다. 예외가 발생하지 않으면 작동합니다.

예외가 발생하면 범위가 종료되지만 catch 블록은 정보 메시지를 출력하고 "잘못된 입력"을 정리합니다 (상태 플래그를 재설정하므로 cin 상태에서 모든 fail 비트를 제거하고 합리적인 지점까지 "멍청한 문자"를 무시하는 것보다 다음 \ n) 래핑 루프가 다시 실행되도록합니다.

Answer

런타임 오류는 프로그램이 실행 중일 때 발생하는 오류입니다. 다음과 같은 다양한 유형이있을 수 있습니다.

  • 논리적 오류 : 프로그램이 예상 된 출력과 다른 출력을 생성하는 경우. 예-두 개의 숫자를 더하는 프로그램을 만들었지 만 실수로 + 기호 대신-기호를 제공합니다.
  • 메모리 누수 : 프로그램은 지속적으로 RAM을 사용하고 메모리 위치가 다른 작업에 한 번 사용되는 것을 방지합니다. 그들의 작업이 끝났습니다. 무한 루프를 실행하거나 사용 된 메모리를 할당 해제하지 않으면 이러한 현상이 발생할 수 있습니다.
  • 크래시 : 다음과 같은 여러 가지 이유로 발생할 수 있습니다.
  • 누락 된 파일 참조. 사진을 표시하고 싶지만 잘못된 경로를 제공하면 프로그램이 사진을 찾지 못하고 충돌합니다.
  • 물건을 0으로 나눕니다. 우리는 단순히 0으로 나눈 것은 정의되지 않는다고 말합니다. 프로그램은 그다지 영리하지 못하며 혼란 스럽습니다.
  • 잘못된 입력을 제공합니다. 프로그램 실행 중에 정수 변수에 문자를 입력 해 본 적이 있습니까? 그렇다면 무슨 일이 일어나는지 알고 있습니다.등

도움이 되었기를 바랍니다…

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다