昨日新しい 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...