Re: Segmentation Fault
От | Frankie Lam |
---|---|
Тема | Re: Segmentation Fault |
Дата | |
Msg-id | b6gutt$18tj$1@news.hub.org обсуждение исходный текст |
Ответ на | Segmentation Fault ("Frankie Lam" <frankie@ucr.com.hk>) |
Ответы |
Re: Segmentation Fault
|
Список | pgsql-interfaces |
Oh, I'm so sorry.... I've made a stupid mistake... and this mistake is at the cost of 3 days work. The segmentation fault is totally irrelevant to the time functions in previous thread. Buggy Code Fragment FYI --8<------------------------ .. .. len =strlen(PQgetvalue(res, 0, i)) * 2 + 1; // <========= printf("***********length=%d\n", len); tmp2 = (char *) calloc(sizeof(char),len); strcat(p2, "'"); PQescapeString(tmp2, PQgetvalue(res, 0, i), len); // <========= this line, // PQescapeString won't stop at '\0', so it will go out // of range of the returning value by PQgetvalue(). strcat(p2, tmp2); strcat(p2, "', "); free(tmp2); tmp2 = NULL; .. .. ---------->8-------------- Here I have one more question, is there any debugging tools other than GDB? I'm not quite used to it, debugging segmentation fault is really a pain. :-( Thx, Frankie Lam "Frankie Lam" <frankie@ucr.com.hk> wrote in message news:b6gku9$2llu$1@news.hub.org... > Hi, > > I want to ask what does the error message mean by > "0x40023abb in resetPQExpBuffer () from /usr/local/pgsql/lib/libpq.so.3"? > I got this message using GDB to trace the program. > (Segmentation fault occurswhen run the program directly.) > > I reviewed the program many times, and found this is only to happen when > I call the `ctime()' or `time()' in a program function. > > code fragment FYI > --8<------------------------ > // `res = PQexec(conn, sql)' here.. > ... > ... > } > else if (!strcmp(PQfname(res, i), SYNCTIME_FIELD_NAME)) > { > // puts("7"); > //char chP[30]; > printf("timer=%ld\n", time(timer)); // <====== without this line, the > program works > // printf("%s", ctime(time(NULL))); > // printf("%s", asctime(localtime(&timer))); > sprintf(tmp, "'1999-12-11 09:50:58'::timestamp, "); > strcat(p2, tmp); > } > else if (!strcmp(PQfname(res, i), SERVERID_FIELD_NAME)) > { > puts("8"); > sprintf(tmp, "'%s'", PQgetvalue(res, 0, i)); > strcat(p2, tmp); > } > } > ... > ... > freeing resources here > ---------->8-------------- > > Thank you very much. > > Frankie Lam. > >
В списке pgsql-interfaces по дате отправления: