일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- css
- Bandit
- 시그널
- 리버싱
- 워게임
- kernel
- 시스템해킹
- pwncollege
- 프로그래밍
- 시스템
- C++
- 하드링크
- radare2
- 리눅스 커널
- 시스템 프로그래밍
- 포너블
- multiplexing
- C언어
- 리눅스
- Leviathan
- 리눅스커널
- wargame
- 시스템프로그래밍
- 커널
- 알고리즘
- Pwnable.kr
- pwn.college
- 컴퓨터구조
- 어셈블리어
- write up
Archives
- Today
- Total
Computer Security
#15 C++ 예외 처리 본문
예외
예외(Exception)란 프로그램이 동작하는 과정에서 발생하는 예상치 못한 오류(Error) 의미한다.
C++에서는 발생할 가능성이 높은 오류에 대해서 예외 처리(Exception Handling)을 할 수 있도록 해준다.
예외 처리 구문
C++은 TRY – CATCH 구문을 이용해서 예외 처리를 수행할 수 있도록 한다.
- Try: 특정한 코드 블록에서 예외가 발생할 수 있음을 명시한다. (Try구문 안에서 예외부분 처리작업을 한다.)
- Throw: Try 구문에서 발생한 오류를 전달합니다.(처리작업중 예외가 나오면 밖으로 던진다.)
- Catch: 발생한 예외에 대해서 핸들러가 특정한 내용을 처리합니다. (던진걸 받아서 처리한다.)
예외 발생 예제
#include <iostream>
using namespace std;
int main(void) {
int a = 7, b = 0;
cout << a / b << 'n';
system("pause");
}
이렇듯 0으로 나누려고 하면 프로그램이 실행 되지 않는다.
따라서, 코드를 해결 해보자.
코드 예시
#include <iostream>
using namespace std;
int main(void) {
int a = 7, b = 0;
try { //try이 영역안에서 예외처리 작업을한다.
if (b == 0) { //만약 0이라면
throw "0으로 나눌 수 없습니다.";
//아래가 출력안되고,0으로 나눌 수 없습니다.라는 문구와 함께 밖으로 던져준다.
}
cout << a / b << 'n';
}
catch (const char* str) { //여기서 잡아서 해당 내용을 출력 해준다.
cout << str << '\n';
}
system("pause");
}
결과 값
예외 처리 예제 2) 클래스에서의 예외 처리
#include <iostream>
using namespace std;
template <typename T>
class Data {
private:
T data;
public:
Data(T data) : data(data) { }
T getData() { return data; }
Data<T> operator /(const Data<T>& other) {
if (other.data == 0) {
throw 0; //나눌 데이터가 0이면 캐치부분으로 이동해 0으로 나눌 수 없습니다가 출력된다.
}
return Data(data / other.data);
}
};
int main(void) {
try {
Data<int> a(7); //a에 7대입
Data<int> b(0); //b에 0대입
Data<int> result = a / b;
cout << result.getData() << '\n';
}
catch (int e) {
if (e == 0) {
cout << "0으로 나눌 수 없습니다.\n";
}
}
system("pause");
}
결과 값
'프로그래밍 > C++' 카테고리의 다른 글
#16 소켓 프로그래밍이란? (0) | 2022.06.30 |
---|---|
#14 C++ STL 연관 컨테이너 라이브러리 (0) | 2022.06.25 |
#13 C++ STL 시퀀스 컨테이너 라이브러리 (0) | 2022.06.24 |
#12 C++ STL 컨테이너 어댑터 라이브러리 (0) | 2022.06.23 |
#11 C++ 스마트 포인터 (0) | 2022.06.22 |
Comments