본문 바로가기

C,C++76

[C/C++] 메모리 동적할당 시 malloc을 사용한다면 / dereferencing NULL pointer, Warning C6011 C 또는 C++에서 malloc 함수를 사용할 경우 아래와 같이 사용할 수 있다. int* ptr = (int*)malloc(sizeof(int)*5); *ptr = 4; 하지만 위 코드는 아래와 같이 C6011 경고를 발생시킨다. Dereferencing NULL pointer 'ptr'. 널 포인터 ptr을 역참조하고 있다라는 뜻이다. malloc 함수는 메모리 할당에 실패하면 null을 반환하는데 (ex. 메모리 공간이 부족한 경우 ) 이 경우 ptr이 null을 가지기 때문에 올바르지 않은 메모리 위치(null)에 접근하는 것을 막기위해 경고를 띄우는 것이다. 올바른 사용법은 다음과 같이 포인터 변수가 null인지 확인 후 사용한다. C++에서는 웬만하면 메모리 동적할당 시 malloc보단 new.. 2019. 11. 24.
[C++ STL] <algorithm> std::remove_if 함수 안녕하세요. 오늘은 헤더의 std::remove_if() 함수에 대해 알아보겠습니다. template ForwardIterator remove_if (ForwardIterator first, ForwardIterator last, UnaryPredicate pred); remove_if 함수는 Input 컨테이너의 [first, last) 범위의 요소들 중 서술 함수인 pred를 만족하지 않는 요소를 Input 컨테이너의 처음부터 차례로 덮어씌웁니다(복사). first, last Input 컨테이너의 범위로 주어진 반복자입니다. [first1, last1) 범위의 컨테이너에서 요소를 탐색합니다. pred 단항 연산을 하는 서술 함수로서 Input 컨테이너의 요소들 중 해당 함수를 만족하지 않을 때 복사합.. 2019. 11. 8.
[C++ STL] <algorithm> std::search() 함수 안녕하세요. 오늘은 헤더의 std::search() 함수에 대해 알아보겠습니다. template ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2); search 함수는 [first1, last1) 범위의 요소들 중 [first2, last2) 범위의 요소들과 순차적으로 모두 일치하는 요소들을 찾아 해당 요소의 시작 지점을 가리키는 반복자를 반환합니다. 예를 들어 "hello world"에서 "world" 를 포함하는 첫 위치를 알고 싶을 때 사용할 수 있습니다. "world"가 존재한다면 첫 문자인 'w'를 가리키는 반복자를 반환합니다... 2019. 11. 7.
[C++ STL] 특정 값 제외 컨테이너 복사 std::remove_copy() 함수 안녕하세요. 오늘은 헤더의 std::remove_copy() 함수에 대해 알아보겠습니다. remove_copy 함수는 std::copy 함수와 유사한 동작을 하는 함수입니다. 4번째 인자를 추가로 받는 것을 제외하면 copy 함수와 동일한 동작을 합니다. template OutputIterator remove_copy (InputIterator first, InputIterator last, OutputIterator result, const T& val); remove_copy 함수는 [first, last) 범위의 요소들 중 val과 같은 요소를 제외하고 result 위치에 순차적으로 복사합니다. first, last [first, last) 범위의 컨테이너의 요소들을 복사합니다. result 복사한.. 2019. 11. 6.
[C++] std::transform() 함수 및 back_inserter 함수에 대해 알아보자 안녕하세요. 오늘은 헤더에 정의되어 있는 STL 알고리즘인 std::transform() 함수에 대해 알아보겠습니다. transform() 함수는 3개의 반복자와 1개의 단항 연산 함수를 매개변수로 갖습니다. ( 바이너리 연산 함수를 인자로 갖기도 하지만 여기선 단항 연산 함수만 다루겠습니다. ) template OutputIt transform( InputIt first1, InputIt last1, OutputIt d_first, UnaryOperation unary_op ); : transform() 함수는 [first1, last1) 범위의 각 요소마다 함수를 호출하고 그 결과를 d_first 위치에.. 2019. 11. 4.
[C++] std::equal 함수로 간단하게 회문 판별 함수 구현해보기 / palindrome 안녕하세요. 오늘은 C++ 라이브러리 함수를 이용해 간단하게 단어의 회문 여부를 판별하는 함수를 작성해보겠습니다. 회문(Palindrome)이란? 'civic', 'eye', 'level', 'madam', 'rotor' 와 같이 거꾸로 읽어도 철자가 같은 단어를 말합니다. 헤더의 std::equal 함수와 멤버 함수인 std::string::rbegin 함수를 사용합니다. bool is_palindrome(const std::string& s) { return std::equal(s.begin(), s.end(), s.rbegin()); } equal 함수는 2개의 대상을 비교하여 참 또는 거짓을 반환합니다. 비교 대상은 [ s.begin(), s.end() ) 범위의 대상1과 s.rbegin()으로 .. 2019. 11. 2.