1

Visual Studio 2008 から例外をキャッチできます。そこでは、デバッグ情報を有効にしてリリース モードで実行し、すべての例外を Debug->Exceptions メニューと
SEH Exceptions (/EHa) を IDE でオンにして
実行します。

m_NotificationTimer = new QTimer();
connect(m_NotificationTimer, SIGNAL(timeout()),
            this,SLOT(CheckOuterLinks()/*,Qt::DirectConnection*/));

Bean が 3 秒ごとに呼び出すこの関数:

void CollectorWorker2::CheckOuterLinks()
{


            while(!rpm_urlStack->isEmptyO())
            {

                        QMutexLocker locker(m_pMutex1);

                        std::map<std::string,std::string > m = rpm_urlStack->topO();

                        locker.unlock();
            }

}

top0() メソッドは、 QStack メンバー関数から最上位の要素を取得する関数であり、次のように pop() で要素を別の場所で削除しました。

std::map<std::string,std::string >  UrlStack::topO()
{

    std::map<std::string,std::string > m;
    try
    {

        static QMutex mutex;
        QMutexLocker locker(&mutex);
            m = m_OuterLinksToProcessOutStack.top();


        return m;

    }

    catch (std::exception const & e)
    {
      std::cout << "Standard exception: " << e.what() << std::endl;

    }
    catch (...)
    {
       std::cout << "Unknown exception." << std::endl;      
    }

}

m_OuterLinksToProcessOutStack は静的メンバーであり、mutex で保護されたコード内の別の場所からの要素で満たされます。
メンバーで満たされた m_OuterLinksToProcessOutStack は、2000 個の要素のようなものを残しました。別の場所でチェックするので、空のスタックの問題ではありません。
アプリケーションを実行してから数分後に、実行時にこのエラーが発生するという問題があります。

First-chance exception at 0x00403fc2 in app.exe: 0xC0000005: Access violation reading location 0x00000004.

QStack の top() メソッドで

4

0 に答える 0