C

pchero on 7월 27th, 2011

  mysql 라이브러리를 이용한 MySQL C 프로그램에서 이상한 로그를 발견했다.   mysql_query()  함수 결과를 수행한 결과값이 1이 나왔던 것. mysql_query() 에 관한 명세는 다음 링크에서 찾을 수 있었다. http://dev.mysql.com/doc/refman/5.0/en/mysql-query.html   이 중, Return Value와 관계있는 항목을 아래에 나타내었다. Return Values Zero if the statement was successful. Nonzero if an error occurred. 정상일 경우 0, 실패일 [...]

Continue reading about mysql_query() return 1

pchero on 7월 26th, 2011

  사내에서 개발중인 제품을 테스트하기 위해 컴파일을 하던 도중, 아래의 오류를 발견했다. mysqlclient 라이브러리를 함께 사용하는 부분이 있었는데, Linking 을 하던 도중 에러가 발생한 것이다. /usr/lib/mysql/libmysqlclient.a(client.o): In function `mysql_close_free_options’: (.text+0xd7d): undefined reference to `SSL_CTX_free’ /usr/lib/mysql/libmysqlclient.a(client.o): In function `mysql_get_ssl_cipher’: (.text+0×1081): undefined reference to `SSL_get_current_cipher’ /usr/lib/mysql/libmysqlclient.a(client.o): In function `mysql_real_connect’: (.text+0x3a4c): undefined reference to `SSL_get_peer_certificate’ /usr/lib/mysql/libmysqlclient.a(client.o): In function [...]

Continue reading about undefined reference to `SSL_CTX_free’

pchero on 7월 25th, 2011

  Stack Overflow 에서 상당히 유용한 스레드를 발견하여 이곳에 싣는다. 내용은 멀티 스레드 환경에서 네트워크 프로그램을 디버그 할 때 어떻게 gdb를 사용하는가? 이다.   Enable core dump saving in your environment. Run command ulimit -c unlimited and rerun your program. When it crashes, load generated core dump in gdb and look backtraces of crash. In [...]

Continue reading about How to use gdb in Multi Threaded Network Program

pchero on 10월 4th, 2010

 /usr/include/features.h 파일에는 컴파일 할 때 사용하는 -D 옵션과 긴밀한 관계가 있다.  어떤 Define을 하느냐에 따라 각기 다른 내용의 컴파일과 링크가 이루어 진다.  그 내용을 /usr/include/features.h 파일의 전문을 여기에 싣는다. /* Copyright (C) 1991-1993,1995-2006,2007,2009 Free Software Foundation, Inc.   This file is part of the GNU C Library.    The GNU C Library is free software; you [...]

Continue reading about /usr/include/features.h

pchero on 8월 24th, 2010

 예제 프로그램을 컴파일 하려던 중 아래의 에러 메시지를 만났다. Formatter.cpp:45: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x Formatter.cpp:45: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x  문제의 발단은 다음의 문구였다. pthread_mutex_t dateLock = PTHREAD_MUTEX_INITIALIZER  mutex 초기화를 위한 매크로 함수 PTHREAD_MUTEX_INITIALIZER 를 사용하기 위해서는 -std=c++0x 를 함께 사용하라는 메시지이다.  즉, 문제 [...]

Continue reading about -std=c++0x -std=gnu++0x

pchero on 8월 9th, 2010

 입력 반복자를 이용하여 노드를 삽입시 많이 사용되는 반복자가 insert_iterator이다. 이 반복자를 이용하면 원하는 위치에 노드를 삽입하려 할 때 편하게 작업을 수행할 수 있다. 반복자의 사용 예를 보면 다음과 같다. #include <iostream>#include <list> using namespace std; int main(){  // 스트링을 저장할 리스트 선언 및 첫 번째 스트링 저장  list<string> strList;  strList.push_back(“AAA”);   // 리스트에 데이터를 입력하기 [...]

Continue reading about insert_iterator 반복자 활용

pchero on 8월 9th, 2010

 리스트는 순차형 컨테이너이면서 포인터 연산을 수행하기 때문에 특정 노드를 바로 찾아가는 키의 개념이 없다. 따라서 원하는 노드를 찾고자 할 때는 반복자를 이용하여 처음부터 차례대로 노드들을 체크해보아야 한다. 리스트는 이러한 단점에도 불구하고 인의의 노드의 삽입과 삭제가 무척 빠르고 효율적이기 때문에 활용가치가 무척 높은 자료구조이다.

Continue reading about 리스트

pchero on 8월 9th, 2010

 벡터는 원소의 상수 레퍼런스를 반환하는 메소드를 제공한다. 이 메소드를 이용하면 벡터 속에 있는 데이터를 바로 얻을 수 있다. 이러한 메소드에는 front(), back() 등이 있다.  다음은 front()와 back() 메소드의 간단한 사용 예를 보여주고 있다. strVec.push_back(“A”);  // 벡터 내부: AstrVec.push_back(“B”);  // 벡터 내부: A BstrVec.push_back(“C”);  // 벡터 내부: A B C cout << “시작: ” << strVec.front() [...]

Continue reading about 벡터

 디폴트로 호출되는 핸들러는 비정상적인 종료가 발생한다는 메시지만을 남기고 시스템을 종료시키는 역할을 수행한다. 이때 아무런 메시지를 남기지 않고 시스템이 종료되기를 원한다면 메모리 핸들러가 호출되지 않도록 만들면 된다. 그러려면 다음과 같이 set_new_handler 메소드를 NULL 파라미터와 함께 호출하여 핸들러의 실행을 막으면 된다.  set_new_handler(NULL);  set_new_handler 는 new.h 파일을 include 해야 사용할 수 있다. 만일 디폴트 핸들러가 아닌 개발자가 지정한 [...]

Continue reading about 디폴트로 호출되는 메모리 예외 핸들러를 변경해 보자.

pchero on 8월 8th, 2010

 메모리를 동적으로 할당한 뒤에 메모리를 해제시키지 않으면 생성된 메모리는 계속해서 시스템에 남게 된다. 따라서 해당 메모리의 사용이 끝나면 delete나 free를 통하여 메모리를 해제시켜야 한다. 예를 들어 다음 메소드의 경우 메소드가 실행될 때마다 메모리를 새오 할당하게 된다. void allocateMem(void){  AClass *aClass = new AClass();  aClass->aMethod();}  메소드의 실행이 끝나도 aClass 객체는 메모리에 남게 되는데, aClass 객체를 접근할 [...]

Continue reading about 메모리 동적 할당과 메모리 해제