找出有趣的错误:当我传递const QString&
参数然后获取const char*
指针指向存储在const QString&
内的数据时,指针指向坏数据(某些字符看起来不像我发送到功能)。
LogbookNote LBHasher::makePropsFromPseudoElement(const QString& id)
{
LogbookNote rv;
if (m_ctx->currentTrim) {
const char* charId = id.toLatin1().data();
...
qDebug() << charId;
}
并致电代码:
LogbookNote LBHasher::makePropsByNameConvention(QString id)
{
LogbookNote g;
if (id.startsWith("_ctx_")) {
g = makePropsFromPseudoElement(id);
...
}
正如您所提到的,调用方法ID为QString
,即QString
对象的完整副本。因此const QString&
可以是一个强大的(没有破坏,删除的临时对象)参考。
为什么会出现这种行为?
答案 0 :(得分:4)
id.toLatin1()
创建一个临时QByteArray
实例。然后,您将指针存储到该临时管理的缓冲区。在分号处,临时被摧毁,指针悬空;稍后使用该指针会显示未定义的行为。
答案 1 :(得分:3)
QString::toLatin1
按值返回py -3 -m pip install praw
,这意味着它是一个临时对象。那个QByteArray
在该行的末尾被破坏(完整表达式),留下指向无效对象的指针并使用它是未定义的行为。