それはMSVC2010のバグですか、それとも何か問題がありますか?

イゴール

次のコードスニペットを検討してください。

database_sqlite.h内:

class __declspec(dllexport) SQLiteDatabase : public Database
{
    virtual void GetTableProperties(DatabaseTable *table, std::vector<std::wstring> &errorMsg);
protected:
    struct SQLiteImpl;
};

struct SQLiteDatabase::SQLiteImpl
{
    std::wstring m_catalog;
    std::wstring_convert<std::codecvt_utf8<wchar_t> > m_myconv;
};

database_sqlite.cpp:

void SQLiteDatabase::GetTableProperties(DatabaseTable *table, std::vector<std::wstring> &errorMsg)
{
    sqlite3_stmt *stmt = NULL;
    std::wstring errorMessage;
    int result;
    std::wstring query = L"SELECT * FROM \"sys.abcattbl\" WHERE \"abt_tnam\" = ? AND \"abt_ownr\" = ?;";
    const unsigned char *dataFontName, *headingFontName, *labelFontName;
    int res = sqlite3_prepare_v2( m_db, sqlite_pimpl->m_myconv.to_bytes( query.c_str() ).c_str(), (int) query.length(), &stmt, 0 );
    if( res == SQLITE_OK )
    {
const char *name = sqlite_pimpl->m_myconv.to_bytes( table->GetTableName().c_str() ).c_str(); // I used this line for debugging purposes
    res = sqlite3_bind_text( stmt, 1, sqlite_pimpl->m_myconv.to_bytes( table->GetTableName().c_str() ).c_str(), -1, SQLITE_STATIC );
    if( res == SQLITE_OK )
    {
        res = sqlite3_bind_text( stmt, 2, sqlite_pimpl->m_myconv.to_bytes( table->GetSchemaName().c_str() ).c_str(), -1, SQLITE_STATIC );
        if( res == SQLITE_OK )
        {
            while( true )
            {

char * result_query = sqlite3_expanded_sql(stmt); res = sqlite3_step(stmt);

ここで、* result_query contains = "SELECT * FROM" sys.abcattbl "WHERE" abt_tnam "= '' AND" abt_ownr "= '';" 私はMSVC2010を使用していますが、驚いたことに、「* name」には空の文字列が含まれています。使用されるクエリを確認できるため、「to_bytes()」の最初の呼び出しは成功しました。

「to_bytes()」を最初に呼び出した後、何かする必要がありますか?または、コンパイラをアップグレードする必要がありますか?

Rockets1111

いいえ、あなたは何か間違ったことをしています。

私は実際に何to_bytesが返されるはわかりませんが、それはstd::basic_string、sostd::stringとfamilyのタイプベースであると想定します

to_bytesはその文字列インスタンスへの一時オブジェクトを返すため、を呼び出すとc_str()、ステートメントの終了後に存在しなくなる文字列の最初の文字へのポインタを取得します。nameダングリングポインタであり、それを出力しようとしいるため、基本的に未定義の動作があります。

メモリを割り当てて文字列をコピーするか、または単にを使用するstd::string必要があります。この場合、問題のタイプは発生しません。

呼び出しがsqlite3_prepare_v2成功する理由は、によって返される文字列がto_bytesまだ存在するためです。文字列はステートメントが終了すると破棄されるためres、の戻り値はsqlite3_prepare_v2。に割り当てられます文字列への有効なポインタが渡されるため、以前ではなく、したがって呼び出しは成功します。

それでも、コンパイラをアップグレードしてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

これは、Jackson JsonParserのバグですか、それとも何か問題がありますか?

分類Dev

MATLAB OOPは遅いですか、それとも何か問題がありますか?

分類Dev

git pushは遅いですか、それとも何か問題がありますか?

分類Dev

最新のPHPのAESGCMが壊れていますか、それとも何か問題がありますか?

分類Dev

このC ++でのEigen :: Tensorの宣言は安全ですか、それともバグがありますか?そして、私はそれのために問題を提出する必要がありますか?

分類Dev

何かが足りないのですか、それとも「qmlRegisterSingletonInstance」にバグがありますか?

分類Dev

これは本当にJAVASCRIPTのバグですか、それとも日付、データ型に問題がありますか?

分類Dev

並べ替え:このパフォーマンスの違いは実際のものですか、それとも何か問題がありますか?

分類Dev

これはKotlinのバグですか、それとも何かが足りませんか?

分類Dev

Webpack DevServerが遅すぎますか、それとも何か問題がありますか?

分類Dev

テープに欠陥がありますか、それとも別の問題がありますか?

分類Dev

Spacy NERをトレーニングするための文章を提供する必要がありますか、それとも段落は問題ありませんか?

分類Dev

行の中に行がある必要がありますか、それとも問題が発生しますか?

分類Dev

グローバル定数。それらの使用に問題はありますか?

分類Dev

JDBC + PL / SQL =とても簡単ですか、それとも問題がありますか?

分類Dev

libcurlの例httpcustomheader.cはバグがありますか(悪い習慣を示しています)、それとも何かが足りませんか?

分類Dev

SQL Server:これはバグですか、それとも誤解がありますか?

分類Dev

画像のURIは変化し続けますが、これはエミュレータの問題ですか、それとも何か問題がありますか?

分類Dev

ノードv13でfs.watch()が壊れていますか、それとも何か問題がありますか?

分類Dev

Pythonの引数とkwargs-それは好みの問題ですか、それとも実際の動作の違いはありますか?

分類Dev

私の同じカウントクエリは、25回実行されるように開発ログに表示されています。それは問題ありませんか、それともコードに問題がありますか?

分類Dev

これはPython / Numpyのバグですか、それとも微妙な問題ですか?

分類Dev

これらのファイルは安全ですか、それとも将来問題になる可能性がありますか?

分類Dev

UserControlの子のサイズ変更に問題がありますか、それともUserControlを使用するよりも優れた方法ですか?

分類Dev

-0はmin()の問題ですか、それとも他の問題ですか?

分類Dev

「揮発性」の定義はこの揮発性ですか、それともGCCに標準準拠の問題がありますか?

分類Dev

matplotlib axvlineの真実があいまいですか、それともリストの問題ですか?

分類Dev

QListWidgetItemオブジェクトはハッシュできません、それはバグですか、それとも理由がありますか?

分類Dev

Swaggerとは何ですか?それはODataと関係がありますか?

Related 関連記事

  1. 1

    これは、Jackson JsonParserのバグですか、それとも何か問題がありますか?

  2. 2

    MATLAB OOPは遅いですか、それとも何か問題がありますか?

  3. 3

    git pushは遅いですか、それとも何か問題がありますか?

  4. 4

    最新のPHPのAESGCMが壊れていますか、それとも何か問題がありますか?

  5. 5

    このC ++でのEigen :: Tensorの宣言は安全ですか、それともバグがありますか?そして、私はそれのために問題を提出する必要がありますか?

  6. 6

    何かが足りないのですか、それとも「qmlRegisterSingletonInstance」にバグがありますか?

  7. 7

    これは本当にJAVASCRIPTのバグですか、それとも日付、データ型に問題がありますか?

  8. 8

    並べ替え:このパフォーマンスの違いは実際のものですか、それとも何か問題がありますか?

  9. 9

    これはKotlinのバグですか、それとも何かが足りませんか?

  10. 10

    Webpack DevServerが遅すぎますか、それとも何か問題がありますか?

  11. 11

    テープに欠陥がありますか、それとも別の問題がありますか?

  12. 12

    Spacy NERをトレーニングするための文章を提供する必要がありますか、それとも段落は問題ありませんか?

  13. 13

    行の中に行がある必要がありますか、それとも問題が発生しますか?

  14. 14

    グローバル定数。それらの使用に問題はありますか?

  15. 15

    JDBC + PL / SQL =とても簡単ですか、それとも問題がありますか?

  16. 16

    libcurlの例httpcustomheader.cはバグがありますか(悪い習慣を示しています)、それとも何かが足りませんか?

  17. 17

    SQL Server:これはバグですか、それとも誤解がありますか?

  18. 18

    画像のURIは変化し続けますが、これはエミュレータの問題ですか、それとも何か問題がありますか?

  19. 19

    ノードv13でfs.watch()が壊れていますか、それとも何か問題がありますか?

  20. 20

    Pythonの引数とkwargs-それは好みの問題ですか、それとも実際の動作の違いはありますか?

  21. 21

    私の同じカウントクエリは、25回実行されるように開発ログに表示されています。それは問題ありませんか、それともコードに問題がありますか?

  22. 22

    これはPython / Numpyのバグですか、それとも微妙な問題ですか?

  23. 23

    これらのファイルは安全ですか、それとも将来問題になる可能性がありますか?

  24. 24

    UserControlの子のサイズ変更に問題がありますか、それともUserControlを使用するよりも優れた方法ですか?

  25. 25

    -0はmin()の問題ですか、それとも他の問題ですか?

  26. 26

    「揮発性」の定義はこの揮発性ですか、それともGCCに標準準拠の問題がありますか?

  27. 27

    matplotlib axvlineの真実があいまいですか、それともリストの問題ですか?

  28. 28

    QListWidgetItemオブジェクトはハッシュできません、それはバグですか、それとも理由がありますか?

  29. 29

    Swaggerとは何ですか?それはODataと関係がありますか?

ホットタグ

アーカイブ