昨日新しい PC を組み立てたので、Windows 8 を試してみることにしました。しかし、今日、中程度の Qt アプリケーションのデバッグ中に、デバッガーは非常に単純な行 (Qt の moc.exe によって自動生成される行でした) で「無効なバインド ハンドル」エラー メッセージを生成しました。
// QWebView *view (...)
view->setUrl(QUrl(QString::fromUtf8("about:blank")));
// Failing in setUrl call, not in QUrl constructor, or in fromUtf8 function.
ただし、デバッガーなしでこのアプリケーションを実行すると、リリース バージョンとデバッグ バージョンの両方で問題なく動作します。
ターミナル サービスを有効にする手がかりはインターネット上にいくつかありますが、Windows 8 にはそのようなサービスはないようです。
誰が私が何をチェックすべきか手がかりを持っていますか?
編集
ウィジェットを他のアプリケーションに移動してもエラーは発生しなかったため、明らかに、ウィジェット (かなり小さい -QWebView
とのみQProgressBar
) で問題ありません。しかし、このウィジェットをメイン関数で表示すると、次のようになります。
QApplication app(argc, argv);
MyWidget w;
w.show();
return app.exec();
同じエラーでまだ失敗しています。コールスタックを調べて(エラーが表示された場合はあまり役に立ちません)、関数呼び出しにステップインすると、エラーをretval = HeapFree(_crtheap, 0, pBlock);
in function _free_base
、 in fileまで追跡しましたfree.c
そして、関数は関数から呼び出されdbgdel.cpp
、関数から_free_dbg( pUserData, pHead->nBlockUse );
呼び出されているunlock()
ようです。
デバッガーを既にアクティブなプロセスに接続しても、同じエラーが発生します。
ここで多くのサードパーティのライブラリをリンクしているので、アイデアがなくなったので、それらなしで試してみます...
編集2:
この例外をプログラムに渡すと、問題なく動作しているように見えます。
編集 3
setUrl 行にコメントを付けると、関数が呼び出される のどこかで同じ例外が発生しQWebKit
ますstrdup
...