当前位置: 代码迷 >> 其他数据库 >> sqlite3 sqlite3_prepare_v2 glibc detected,该如何处理
  详细解决方案

sqlite3 sqlite3_prepare_v2 glibc detected,该如何处理

热度:4258   发布时间:2013-02-26 00:00:00.0
sqlite3 sqlite3_prepare_v2 glibc detected
请问各位,下面的代码运行到sqlite3_prepare_v2时出现以下错误。 是什么原因呢?
*** glibc detected *** ./ARM_ECG.elf: free(): invalid next size (normal): 0x001c75c0 ***
Aborted


int main()
{
char *buffer;//要写的二进内容,也可以从文件读出来
buffer=new char[1024];
for(int i=0;i<1024;i++)buffer[i]='a';

sqlite3 *db;
sqlite3_stmt *stat;
sqlite3_open("ECG.db", &db);
cout << 1 << endl;
sqlite3_prepare_v2(db,"insert into record(recordId,recordTime,recordData)values(1,'2011-5-10 14:24:33',?);",-1,&stat,0);//准备插入数据
cout << 2 << endl;
sqlite3_bind_blob(stat,1,buffer,strlen(buffer),NULL); //把内容和字段绑定
cout << 3 << endl;
sqlite3_step(stat);//执行
cout << 4 << endl;
sqlite3_finalize(stat);//释放内存
cout << 5 << endl;
sqlite3_close(db);

return 0;
}

------解决方案--------------------------------------------------------
buffer=new char[1024];
for(int i=0;i<1024;i++)buffer[i]='a';

这里buffer没有\0结束符,
然后到了这里:
sqlite3_bind_blob(stat,1,buffer,strlen(buffer),NULL); //把内容和字段绑定

strlen怎么知道长度呢。
换成:
sqlite3_bind_blob(stat,1,buffer,1024,NULL); //把内容和字段绑定
或者
sqlite3_bind_blob(stat,1,buffer,sizeof(buffer)/sizeof(char),NULL); //把内容和字段绑定