X-Original-To: pgsql-interfaces@postgresql.org Received: from spampd.localdomain (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id C77F4475458 for ; Thu, 3 Apr 2003 04:29:35 -0500 (EST) Received: from news.hub.org (news.hub.org [64.49.215.80]) by postgresql.org (Postfix) with ESMTP id 412DA474E44 for ; Thu, 3 Apr 2003 04:29:35 -0500 (EST) Received: by news.hub.org (Postfix, from userid 8) id 2239943A89E; Thu, 3 Apr 2003 04:29:35 -0500 (EST) From: "Frankie Lam" X-Newsgroups: comp.databases.postgresql.interfaces Subject: Re: Segmentation Fault Date: Thu, 3 Apr 2003 17:31:16 +0800 Organization: Hub.Org Networking Services (http://www.hub.org) Lines: 82 Message-ID: References: X-Complaints-To: usenet@news.hub.org X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 To: pgsql-interfaces@postgresql.org X-Spam-Status: No, hits=-15.7 required=5.0 tests=BAYES_01,PRIORITY_NO_NAME,QUOTED_EMAIL_TEXT,REFERENCES autolearn=ham version=2.50 X-Spam-Level: X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp) X-Archive-Number: 200304/15 X-Sequence-Number: 3954 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" 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. > >