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);