본문 바로가기

C++6

[C++][GDB] std::string 에 계속 append() 데이터를 넣을 경우 signal SIGABRT, Aborted. string 에 계속 데이터를 넣을 경우 signal SIGABRT, Aborted . 발생 gdb #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x00007f4b9a9fc9fb in __GI_abort () at abort.c:100 #2 0x00007f4b9b051957 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #3 0x00007f4b9b057ab6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #4 0x00007f4b9b057af1 in std::terminate() () from /usr/lib/x8.. 2022. 5. 11.
[정보] C++ SIGCHLD, waitpid()에 관해서 안녕하세요. 오두막입니다. 프로세스 종료 및 재구동 등을 테스트하다가 알게된 정보에 대해서 전달드립니다. 부모프로세스에서 자식프로세스를 여러개 만들어서 처리를 하다가 자식프로세스가 종료되면 부모프로세스에 SIGCHLD가 전달됩니다. 그래서 SIGCHLD 시그널을 받고 처리를 하게 되는데, 자식프로세스가 여러개이고 여러 자식프로세스가 동시에 종료가 되면 종료된 수만큼 SIGCHLD가 발생하지 않는걸 알게됐습니다. 검색을 해보니, SIGCHLD의 경우 여러 번 발생하면 하나로 축소되는 신호이므로 waitpid()를 여러번 수행 필요하다는걸 알게됐습니다. 그래서 기존에는 한번에 SIGNAL마다 wait()함수를 사용하여 한번씩 처리했지만, 아래 코드와 같이 waitpid() 함수를 사용하여 처리하도록 변경했습.. 2021. 11. 26.
Chapter 3 자원 관리 2018/03/28 - [프로그래밍/Effective C++] - Chapter 2 생성자, 소멸자 및 대입 연산자 Chapter 3 자원 관리 프로그래밍 분야에서 자원(resource)이란, 사용을 일단 마치고 난 후에 시스템에 돌려주어야 하는 모든 것을 일컫는다. 가장 중요한 것은 "가져와서 썼으면 해제해야, 즉 놓아 주어야 한다" 항목 13: 자원 관리에는 객체가 그만! 특정 함수로 얻어낸 자원이 항상 해제되도록 만드는 방법은, 자원을 객체에 넣고 그 자원 해제를 소멸자가 맡도록 하며, 그 소멸자는 실행 제어가 함수를 떠날 때 호출되도록 만드는 것이다. 소프트웨어 개발에 쓰이는 상당수의 자원이 힙에서 동적으로 할당되고, 하나의 블록(block)혹은 함수 안에서만 쓰이는 경우가 잣기 때문에 그 블록 .. 2018. 4. 11.
Chapter 2 생성자, 소멸자 및 대입 연산자 2018/03/19 - [프로그래밍/Effective C++] - Chapter 1 C++에 왔으면 C++의 법을 따릅시다 Chapter 2 생성자, 소멸자 및 대입 연산자 C++ 클래스에 한 개 이상 꼭 들어 있는 것들이 생성자와 소멸자, 대입 연산자이다. 생성자: 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 객체의 초기화를 맡는 함수소멸자: 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어하는 함수대입 연산자: 기존의 객체에 다른 객체의 값을 줄 때 사용하는 함수 클래스를 제대로 쓰려면 이들이 우선 우뚝 서 있어야 함은 분명하고도 중요한 요구사항이다. 항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 C++의 복사 생성자(copy.. 2018. 3. 28.
Chapter 1 C++에 왔으면 C++의 법을 따릅시다 Chapter 1 C++에 왔으면 C++의 법을 따릅시다'가장' 근본적인 것들을 다루고 있는 단원 항목 1: C++를 언어들의 연합체로 바로보는 안목은 필수 초창기의 C++는 단순히 C 언어에 객체 지향 기능 몇 가지가 결합된 형태였다. 오늘날의 C++는 다중패러다임 프로그래밍 언어(multiparadigm programming)라고 불립니다. 절차적(procedural) 프로그래밍을 기본으로 하여 객체 지향(object oriented), 함수식(functional), 일반화(generic) 프로그래밍을 포함하며 메타프로그래밍(metaprogramming) 개념까지 지원하고 있다. C++를 잘 이해하는 방법C++를 단일 언어로 바라보는 눈을 넓혀, 상관관계가 있는 여러 언어들의 연합체(federatio.. 2018. 3. 19.
독자 여러분 반갑습니다. 이 책의 목적은 C++를 효과적으로 구사하는 방법을 가르쳐 주는 것이다. C++라는 언어를 사용해서 제작한 여러분의 소프트웨어가 이해하기 좋고 유지보수에도 그만이고 이식성, 확장성, 효율성까지 지님은 물론이며 여러분의 의도대로 동작하게 만들 때까지 많은 수고가 들지 않는 그런 결과물이 되는 데 도움이 될 지침 혹은 조언을 모아 두었다. 안목을 기르자는 목표를 가지고 읽자. 용어사용에 대하여 선언(declaration)은 코드에 사용되는 '어떤 대상'의 이름과 타입을 컴파일러에게 알려 주는 것 모든 함수의 선언문에는 시그니처(signature), 함수의 매개변수 리스트와 반환 타입이 나와 있다. 함수의 경우엔 시그니처가 그 함수의 타입이다. 정의(definition)는 선언에서 빠진 구체적인 세부사항을 컴.. 2018. 3. 15.