2010年11月25日 星期四

你永遠料不到自己有多蠢

最近某個作品在開啟檔案時會不定期當掉 ... 原本一直找不出原因, 直到我在除另一個不相關的 bug 時發現這個函式:
const char * fromURI( const QUrl & uri ) {
    QByteArray tmp( uri.toString().toUtf8() );
#ifdef Q_OS_WIN
    if( uri.scheme() == "file" ) {
        tmp.prepend( 'w' );
    }
#endif
    return tmp;
}
看不出來嗎? 我提示一下, QByteArray 有一個 operator const char *() const 成員讓它自動轉型成 const char * , 效果和 std::string::c_str() 一樣.
沒錯, 我回傳了暫時物件裡的 handle , 這就是程式會不定期崩潰的元兇!
真不知道幾天前我怎麼會寫下這種東西= =

沒有留言:

張貼留言