mysql API를 사용하면서 Segment Fault가 나서요..
글쓴이: fuerza / 작성시간: 일, 2003/12/07 - 7:09오후
mysql Ver 11.16 Distrib 3.23.49, for redhat-linux-gnu (i386)
void CFosdb::DBConnect(const char *host,const char *user, const char* passwd, const char* db) { if((mysql = (MYSQL*)malloc(sizeof(MYSQL))) != NULL) { if(mysql_real_connect(mysql,host,user,passwd,db,0,NULL,0) == NULL) { free(mysql); exit(1); } } printf("connect 후..\n"); }
이런식으로 했습니다.
근데 단독으로 실행하면 잘되는데, 한번씩 다른 프로그램에서 불러다 쓰면 Segement fault가 나버립니다.
mysql_err()로 출력을 할려고 해도 출력도 안되고요..nㅜ.ㅜ
근데 execl()로 해서 사용하면 되더군요 ㅜ.ㅜ;; 왜이러는지...
도와 주세요..^^
Forums:
Re: mysql API를 사용하면서 Segment Fault가 나서요..
see : mysql_init(mysql); /* <== 이 부분을 추가하세요 *
m.ㅡ.ㅡ 에고 죄송 생성자 부분입니다..
이렇게 초기화 해주었습니다.-
Re: m.ㅡ.ㅡ 에고 죄송 생성자 부분입니다..
메뉴얼에서 mysql_init에 관한 부분입니다.
보시면 인수가 NULL일때는 MYSQL구조체를 할당하고,
초기화를 진행합니다..
님께서 작성하신 CFosdb 생성자에서
이미 할당되고 초기화된 MYSQL 정보가 DBConnect가 실행이 되면서
새로이 malloc이 실행이 될터이고, 그러면 생성자에서 할당된 만큼
메모리릭이 발생이 됩니다. 또, DBConnect에선 할당만 한것이지,
초기화가 되질 안았으니.. 정의되지 않은 동작을 하게되겠네요..
ps. 메뉴얼을 꼼꼼히 읽어 보셔야 겠네요...
만약 저렇게 에러가 나지않았다면 메모리 새는것은 여간해서는 발견
하기 힘들었을테니까요...
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
Re: 간단히 쓰레드를 이용해서 돌려도 비슷한 현상이 발생함
쓰레드로 mysql_real_connect() 함수를 이용할 때 가끔씩 발생하는 것을 봤습니다.
관련 버글 레포트를 작성해서 MySQL 사이트에 제출했고, 관련 담당자가 분석중입니다.
아래 링크 참조하면, 제가 시험한 오류와 진행상황도 볼 수 있을 것입니다.
http://bugs.mysql.com/bug.php?id=37653
댓글 달기