[英]QString& QString::operator=(const QByteArray&)' is private
[英]Why const QString& param return bad const char* pointer to data
找出有趣的bug:當我傳遞const QString&
parameter然后獲取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);
...
}
如你QString
,調用方法id來自QString
,即QString
對象的完整副本。 因此const QString&
可以是一個強大的(沒有破壞,刪除臨時對象,例如)引用。
為什么發生這種行為?
id.toLatin1()
創建一個臨時的QByteArray
實例。 然后,您將指針存儲到該臨時管理的緩沖區。 在分號處,臨時被摧毀,指針懸空; 之后使用該指針會顯示未定義的行為。
QString::toLatin1
按值返回QByteArray
,這意味着它是一個臨時對象。 QByteArray
在該行的末尾被破壞(完整表達式),留下指向無效對象的指針並使用它是未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.