最近遇到了一个BUG,就是使用
QString(
"Hello"
).toLocal8Bit().data();
引起了一个乱码问题。因为之前的项目经验中,知道了要想解决该问题,需要将该行代码分开来写,这也是网上普遍给出来的答案:
QString
str
=
;
QByteArray ba
.toLocal8Bit();
char
*
pStrDataPtr
ba.data();
问题虽然是解决了,但是今天又被同事提及,却发现不能解释个中缘由。所以有了这篇分析文章。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
contain_of QString("Hello") 应该是临时对象析构 导致的
_THINCT 嗯嗯,是的。析构的时候,将字符串用到的内存也一起释放了。
contain_of clang -Wlifetime 选项可以检测临时对象析构后再调用这种错误 不知道正式发布没 godbolt.org/z/jCxWWE 我就在这见过