用 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 后,这句就卡死了..
1
KaoN 2018-06-15 21:23:28 +08:00
QString 不是 POD type 的。。你这样 memcpy 肯定有问题
|