sqlite中的segmentfault问题
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
#define _DEBUG_
int main()
{
sqlite3 *db;
char *sql;
char *zErrMsg;
char **Result;
char **tmp;
int rc;
int numl = 0, row = 0;
int i, j, z;
int index;
char name[200];
int sv_count;
rc = sqlite3_open("Bill.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", zErrMsg);
sqlite3_close(db);
exit(1);
} else {
printf("You have open the database successfully\n");
}
#ifdef _DEBUG_
printf("line %d, %s\n", __LINE__, zErrMsg);
#endif
sql = "SELECT DaySumTableName FROM BillGeneralTable";
sqlite3_get_table(db, sql, &Result, &row, &numl, &zErrMsg);
printf("\n\n\n\nrow = %d, numl = %d\n", row, numl);
sv_count = row;
index = 1;
for (i = 0; i < numl; i++) {
for (j = 0; j < row; j++) {
printf("%s\n", Result[index]);
index++;
}
printf("\n");
}
z = 1;
while (sv_count > 0) {
sprintf(name, "CREATE TABLE %s(Billingdata VARCHAR(20) NOT NULL,\
NormalBillNum VARCHAR(10) NOT NULL,\
NormalBillAmount VARCHAR(20) NOT NULL,\
ReturnedBillNum VARCHAR(20) NOT NULL,\
ReturnedBillAmount VARCHAR(20) NOT NULL, \
InvalidBillNum VARCHAR(10) NOT NULL,\
InvalidBillAmount VARCHAR(20) NOT NULL, \
DayAmount VARCHAR(20) NOT NULL\
);", Result[z++]);
sql = name;
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
sv_count--;
}
#ifdef _DEBUG_
printf("line %d, %s\n", __LINE__, zErrMsg);
#endif
z = 1;
sv_count = row;
while (sv_count) {
sprintf(name, "INSERT INTO\"%s\"VALUES('11', '22', '33', '44', '55', '66', '77', '88');", Result[z]);
sql = name;
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
z++;
sv_count--;
}
#ifdef _DEBUG_
printf("line %d, %s\n", __LINE__, zErrMsg);
#endif
sql = "SELECT * FROM GDDSFPDaySumTable";
sqlite3_get_table(db, sql, &tmp, &row, &numl, &zErrMsg);
printf("\n\n\n\nrow = %d, numl = %d\n", row, numl);
for (i = 0; i < (row + 1) * numl; i++) {
printf("tmp[%d] = %s\n", i, tmp[i]);
}
#ifdef _DEBUG_
printf("line %d, %s\n", __LINE__, zErrMsg);
#endif
sqlite3_free_table(Result);
#ifdef _DEBUG_
printf("line %d, %s\n", __LINE__, zErrMsg);
#endif
sqlite3_free_table(tmp);
#ifdef _DEBUG_
printf("line %d, %s\n", __LINE__, zErrMsg);
#endif
sqlite3_close(db);
#ifdef _DEBUG_
printf("line %d, %s\n", __LINE__, zErrMsg);
#endif
printf("line %d\n", __LINE__);
return 0;
}
请问各位高手,为什么程序运行到最后会报一个segmentfault?也就是说程序都执行到return 0上面的那一行了。求高手指导呀.不胜感激!
[解决办法]
汗,终于查到了,name的空间太小了,你进入建表那段就要报错了,改大点,1024。