QT 질문입니다.
글쓴이: anfl / 작성시간: 금, 2003/06/13 - 6:01오전
안녕하세요. 답답한 마음에 글을 올리게 되었습니다.
QT Desiginer로 form을 만들고 핸들링 과정에서 문제가 생겼습니다.
#include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> #include <ctype.h> #include <string.h> #include <sys/stat.h> #include <assert.h> #include <qstring.h> #include <qtextstream.h> #define NAMELENGTH 41 #define NROOMS 10 #define UN_USEROOM 0xff #define FILENAME "residents.txt" #define kor(str) QString::fromLocal8Bit(str) void hotel::init() { viewRoom(); } //char namebuf[NAMELENGTH]; char *hotel::getOccupier(int roomno) { int infile; static char namebuf[NAMELENGTH] = "TEST_STRING"; long offset; int nread; if ((infile = open(FILENAME, O_RDONLY)) < 0) return NULL; assert(infile > 0); offset = (roomno-1) * NAMELENGTH; if (lseek(infile, offset, SEEK_SET) < 0) { close(infile); return NULL; } nread = read(infile, namebuf, NAMELENGTH); if (nread <= 0) return NULL; else { printf("DEBUG : nread = %d\n", nread); namebuf[nread-1] = 0; printf("DEBUG : name = %s, %p\n", namebuf, &namebuf); close(infile); return namebuf; } close(infile); return NULL; } void hotel::viewRoom() { int i; char *name; QListViewItem * item = new QListViewItem( MainList, 0); QString str; MainList->setSorting(-1, FALSE); for (i=1; i<=NROOMS; i++) { item->setText(0, trUtf8(str.number(i, 10))); #if 1 // 여기 이부분에서 문제가 발생합니다. if ((name = getOccupier(i))) { printf("DEBUG : name = %s, %p\n", name, name); // item->setText(1, "test"); item->setText(1, QString(name)); } else { item->setText(1, "Free!"); } item = new QListViewItem( MainList, item); #endif } }
위에 보시면 getOccupier(i)함수를 사용하는 부분에서 getOccupier(i)의 내부변수중 static으로 선언되어 data영역에 잡힌 namebuf의 주소를 받아와서 NULL이 아닐때에 QListViewItem을 추가해주는 부분이 있습니다.
static 변수의 주소까지는 잘 받아 옵니다. 그러나 막상 실행을 시켜보면 SIGSEGV signal을 받고 세크먼트 폴트가 났다면서 죽어 버립니다.
hotel class의 member 변수로 해주어도 마찮가지고 함수 바깥에 선언을 해주어도 마찮가지 입니다.
어떤게 잘못되었는지 아시는 분은 귀찮으시드라도 꼭 답변 부탁드립니다.
Forums:
함수를 char* 로 반환하지말고 const char로 반환해보죠
setText(i, QString(name) );에서
에서 문제가 발생하지 않나요?
char* getOcup...()에서 제목대로 const char*로 바꿔보세요.
저도 실행해보질 못해서 확답은 못하겠네요.
..
답변 감사합니다.
문제의 부분을 const로 수정 해보았으나 잘 안되는것 같습니다. ㅜㅜ
전체 프로젝트 파일을 올려 놓을테니 시간이 되시는 분은 꼭 도와 주시기 바랍니다.
http://home.dongguk.edu/user/bckddn/rooms.tar.gz
댓글 달기