用 QT 的 Sqlite 将一个 struct 以二进制的方式存到 db 中,结果在读取 db 后,程序总是卡死,程序异常结束。
一开始以为是数据库读写有问题,后来发现不是.
接着比对二进制写入的数据与读取的数据是否一致,结果是一致的.
然后我就疯掉了.搞不清问题在哪里,QT 也不报错,就是卡死,程序异常结束。
再接着,只能是一行一行加调试信息,发现,db 读取后,要用 struct 变量的时候卡死了.
接着懵逼....
然后不知咋地,突然想到 struct 内有个 QString 变量,改成 char 后,解决了...
庆幸我找到了这个点,虽然还不清楚原理.要不然我要把一堆参数一个个写到数据库了...
有没有大神解释下
大概代码:
typedef struct
{
QString a;
int b;
double c;
}Test;
// save
Test write;
QByteArray param((char*)&write, sizeof(Test));
sql_save(param);
// read
Test read;
QByteArray param_r;
sql_read(¶m_r);
memcpy(&read, param_r.data(), sizeof(Test));
qDebug() << read.a; // <- 在 memcpy 后,这句就卡死了..
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.