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
댓글 달기