SQLite3_step导致故障
SQLite3_step cause SEGFAULT
我正在尝试运行这段代码,但应用程序仍然在最后一个sqlite3_step函数上崩溃。当我在调试器下运行时,有时应用程序可以工作,但sqlite3_step返回错误代码 7 (NOMEM(。
法典:
string prereq("SELECT * FROM students WHERE KEYID=?;");
sqlite3_stmt *stmt;
const char* errmsg = nullptr;
int res;
res = sqlite3_prepare_v2(db,prereq.c_str(),prereq.size(),&stmt,&errmsg);
sqlite3_bind_int64(stmt,1,sqlite3_int64(atoi(getID().c_str())));
res = sqlite3_step(stmt);
string req;
switch (res)
{
case SQLITE_DONE:
req += "INSERT ";
break;
case SQLITE_ROW:
req += "UPDATE ";
break;
default:
pmsg(errmsg,1);
return -1;
break;
}
sqlite3_reset(stmt);
if(strcmp(req.c_str(),"INSERT ")==0)
req += "INTO Students(KEYID,FNAME,LNAME,DOB,PHONE,ADDRESS,CITY,ZIP,COUNTRY,LVL,SECTION,GROUPS,ERRORLIST,ABSENCELIST,LUNCH,ACCESSRIGHT) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);";
else req += "INTO students WHERE KEYID=? SET FNAME=?,LNAME=?,DOB=?,PHONE=?,ADDRESS=?,CITY=?,ZIP=?,COUNTRY=?,LVL=?,SECTION=?,GROUPS=?,ERRORLIST=?,ABSENCELIST=?,LUNCH=?,ACCESSRIGHT=?;";
res = sqlite3_prepare_v2(db,req.c_str(),req.size(),&stmt,&errmsg);
if(res!=SQLITE_OK) return -2;
sqlite3_int64 keyid(atoi(getID().c_str()));
sqlite3_bind_int64(stmt,1,keyid);
sqlite3_bind_text(stmt,2,getFname().c_str(),getFname().size(),0);
sqlite3_bind_text(stmt,3,getLname().c_str(),getLname().size(),0);
sqlite3_bind_text(stmt,4,getDOB().c_str(),getDOB().size(),0);
sqlite3_bind_text(stmt,5,getPhone().c_str(),getPhone().size(),0);
sqlite3_bind_text(stmt,6,getAddress().c_str(),getAddress().size(),0);
sqlite3_bind_text(stmt,7,getCity().c_str(),getCity().size(),0);
sqlite3_bind_text(stmt,8,getZip().c_str(),getZip().size(),0);
sqlite3_bind_text(stmt,9,getCountry().c_str(),getCountry().size(),0);
sqlite3_bind_text(stmt,10,getLvl().c_str(),getLvl().size(),0);
sqlite3_bind_text(stmt,11,getSection().c_str(),getSection().size(),0);
string gp;
for(string vgp: getGroups())
{
gp += vgp;
gp += ";";
}
sqlite3_bind_text(stmt,12,gp.c_str(),gp.size(),0);
sqlite3_bind_text(stmt,13,getErrors().c_str(),getErrors().size(),0);
sqlite3_bind_text(stmt,14,getAbsences().c_str(),getAbsences().size(),0);
sqlite3_bind_text(stmt,15,getLunch().c_str(),getLunch().size(),0);
sqlite3_bind_text(stmt,16,getAR().c_str(),getAR().size(),0);
res = sqlite3_step(stmt);
cout << res << endl;
if(res!=SQLITE_DONE) return -3;
sqlite3_finalize(stmt);
sqlite3_free(errmsg);
我找到了解决问题的方法。我从更新请求中删除了"INTO"。我将 funct((.size(( 替换为 strlen(funct(((。
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串