
用 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 肯定有问题 |