본문 바로가기

분류 전체보기96

[C++] 배열 index 관련 예외처리 [C++] 배열 index 관련 예외처리함수호출index 를 매개변수로 가지는 함수를 호출하고, 그 함수는 전달받은 index 로 배열 혹은 벡터에 접근한다고 가정해보자.만약 index 가 범위를 초과한다면 segmentation fault 에러가 발생할 것이다.  해결아래와 같이 try, catch 를 활용하여 함수에서 throw 하는 예외를 처리할 수 있다. 2024. 5. 3.
[C++] std::cin 타입 불일치 [C++] std::cin 사용 시 주의점cin 변수의 타입불일치코드를 짜다가 정수 값을 입력받을 일이 있었는데, 예상치 못한 에러가 나와서 당황했다. 아래와 같은 코드가 있다고 해보자.#include int main(){ int index; std::cout > index; std::cout > num; std::cout 올바른 정수값을 넣어 줄 경우 출력은 생각하는 대로다.만약 문자를 입력한다면 어떻게 될까두번째 입력을 받기도 전에 채워지고 이상한 값이 num 에 할당된다. 문제의 원인타입 불일치: int 변수에 문자를 입력하면, 입력 스트림은 실패 상태로 설정된다. 이 때문에 변수 index는 초기화되지 않거나 기본값인 0으로 설정된다.스트림의 실패 상태: 입력이 실패하면 스트.. 2024. 5. 2.
[C/C++] 정올 - 파스칼 삼각형 #2071 문제 파스칼 삼각형이란? 아래 과 같이 자신의 왼쪽 위의 좌표와 오른쪽 위의 좌표 값을 더해서 값을 계속 갱신해 나가는 형태의 삼각형을 말한다. 아래와 같은 파스칼 삼각형의 높이 n과 종류 m을 입력 받은 후 다음과 같은 형태의 파스칼 삼각형을 출력하는 프로그램을 작성하시오. 풀이 종류 3가지가 주어지는데, 종류 1이 종류2와 3을 풀기위한 힌트라고 본다. 먼저 n*n 의 2차원 배열을 만들고 종류 1의 파스칼 삼각형을 쉽게 만든 다음. 종류 2와 종류 3은 종류1에 기반하여 출력만 해주면 되는 것이다. (출력시에 요소의 값이 0인경우 공백을 출력한다) int arr[n][n]; memset(arr, 0 ,n*n*sizeof(int)); for ( int i = 0; i < n; i++){ arr[i][.. 2024. 4. 24.
[C/C++] 정올 - 별삼각형 #1523 #1719 #1329 문제 삼각형의 높이 n과 종류 m을 입력 받은 후 다음과 같은 삼각형 형태로 출력하는 프로그램을 작성하시오. 풀이 기본적으로 모두 푸는 방법은 동일한데, 행렬을 만들어서 별을 집어넣을 필요는 없다. 빈 공간은 모두 공백을 출력함으로써 해결 가능하기 때문이다. for 루프시에는 행렬처럼 0부터 시작시키는게 아니라, 1부터 시작을 시키는게 생각이 편하다. for ( int i = 1; i 2024. 4. 23.
[C/C++] 커널 드라이버에서의 함수포인터 커널 드라이버에서의 함수포인터 구조체에 함수 포인터를 사용하는 방법은 커널 드라이버나 다른 시스템 수준의 프로그래밍에서 매우 유용하게 사용된다. 이러한 방식은 다양한 기능을 동적으로 처리할 수 있게 해주며, 특히 장치 드라이버의 인터페이스를 관리할 때 흔히 볼 수 있다. 커널 드라이버에서의 사용 커널 드라이버에서는 구조체와 함수포인터를 사용하여 다양한 하드웨어 또는 가상 장치의 동작을 추상화한다. 예를 들어, Linux의 파일 시스템 또는 네트워크 장치 드라이버에서는 각각의 장치 특성에 맞게 동작을 정의할 수 있는 함수 포인터를 포함하는 구조체를 사용한다. 이러한 방식은 각 장치 또는 드라이버가 동일한 인터페이스를 공유하면서도, 내부적으로 다른 구현을 가질 수 있게 해주어 코드의 재사용성과 모듈성을 높인.. 2024. 4. 22.
[C/C++] 콜백함수의 인자로써 void 포인터 콜백함수의 인자로써 void 포인터 Intro 지난 게시글에서, 이중포인터와 void 포인터에 대해 간략하게 다뤘다. https://microelectronics.tistory.com/54 [C/C++] 이중포인터와 void 포인터 이중포인터와 void 포인터 문자열배열은 이중포인터이다 아래와 같이 문자열 배열이 있고, 해당 문자열배열의 주소를 void 포인터에 초기화시켰다고 가정해보자. char* arr[] = {"banana", "apple"}; void* vr microelectronics.tistory.com 또한 콜백함수에 대해 왜/언제 쓰는지를 알아보았다. https://microelectronics.tistory.com/46 [C/C++] 콜백함수 (Callback Function) 콜백 함.. 2024. 4. 21.
혼자 공부할 때 참고할 링크들 Linux Kernel 리눅스 커널 모듈 https://wikidocs.net/book/9521 Linux 커널 모듈 프로그래밍 가이드(5.x) [The Linux Kernel Module Programming Guide](https://github.com/sysprog21/lkmpg) Peter Jay Salzma… wikidocs.net 리눅스 부트코드 http://cloudrain21.com/category/linux-kernel/analysis-of-linux-kernel Analysis of Linux Kernel Archives - Rain.i 일반적인 명령어(instruction) 뿐만 아니라, Barrier 를 위한 명령어 또한 아키텍쳐마다 다릅니다.그리고, 컴파일러 Barrier 로 사용.. 2024. 4. 20.
[C/C++] 이중포인터와 void 포인터 이중포인터와 void 포인터 문자열배열은 이중포인터이다 아래와 같이 문자열 배열이 있고, 해당 문자열배열의 주소를 void 포인터에 초기화시켰다고 가정해보자. char* arr[] = {"banana", "apple"}; void* vrr = arr; 여기서 다들 아는 내용을 정리해보자. 배열의 이름은 해당 배열의 첫 번째 요소의 주소를 나타내므로, arr는 &(arr[0])와 동일하다. arr는 char* 타입의 요소를 저장하는 배열이기 때문에, 이를 char** 타입으로 볼 수 있다. 즉, arr는 char* 타입의 배열의 첫 번째 요소의 주소를 가리키는 포인터이다. 포인터 변수의 크기는 64비트 시스템 기준 8바이트이다. 메모리 주소를 모두 표현해야 하기 때문이다. arr 는 문자열포인터의 배열로,.. 2024. 4. 20.
[C/C++] 정올 - 달팽이 트리 #5398 문제 달팽이의 나라 달팽국에서는 크리스마스 때 특별한 트리를 세워 장식한다. 이 트리를 달팽국 사람들은 달팽이 트리라고 부르는데, 달팽이 트리는 꼭대기부터 0~9까지의 정수가 반시계 방향으로 밖에서 안으로 채워진 형태를 띄고 있다. 달팽이 트리의 크기는 매 해 달팽국의 행복도에 비례하여 다르게 정해진다. 예를 들어 아래와 같이 행복도가 6이면 크기 6짜리 달팽이 트리가 만들어진다. 달팽이 삼각형 문제와 똑같이 풀면 된다. https://microelectronics.tistory.com/52 int m = n; int x = -1; int y = 0; int num = 0; while ( m > 0 ){ for ( int i = 1; i 2024. 4. 17.