请问各位,下面的代码运行到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); //把内容和字段绑定