qt3-sqlite的一个程序,make通过,但运行提示“段错误”,调试很长时间,基本可以确定是下面代码中字符串使用的问题,请大家帮忙看看哪里出的错(我把本人认为可能出错的点用红色作了标注):
13 #include "sqlite3.h"
14 #include <cstdlib>
15 using namespace std;
16 void teaform::on_okButtonClicked()
17 {
18 sqlite3* db;
19 char *num=(char*)malloc(10*sizeof(char));
20 char *author=(char*)malloc(30*sizeof(char));
21 char *storage=(char*)malloc(10*sizeof(char));
22 int rc,nRow,nCol;
23 char *sql=(char*)malloc(100*sizeof(char));
24 char *str=(char*)malloc(20*sizeof(char));
25
26 QString nameText=nameEdit->text();
27 QString resultQString,errMsgQString;
28
29 //open the databse:
30 rc=sqlite3_open("library1.db",&db);
31
32 //open failed:
33 if(rc)
34 {
35 errMsgQString.sprintf("cannot open database: %s\n",sqlite3_errmsg(db));
36 resultEdit->setText(errMsgQString);
37 sqlite3_close(db);
38 }
39
40 //open successed, then do querying:
41 else{
42 strcpy(str,nameText.ascii());
43 sprintf(sql,"select * from book where BookName='%s';",str);
44
45 char **dbResult;
46 char *errmsg=(char*)malloc(100*sizeof(char));
47 rc=sqlite3_get_table(db,sql,&dbResult,&nRow,&nCol,&errmsg);
......
sqlite3_free_table(dbResult);
sqlite3_close(db);
}
......
程序最后有调用free()函数对相关的字符串指针进行释放:
free(num);
free(author);
free(storage);
free(sql);
free(str);