-1

マシンの 1 つでランタイム エラーが発生しています。何百台ものマシンでアプリケーションをテストしましたが、エラーは発生しません。エラーウィンドウを以下に示します。

アプリケーションがクラッシュすると、エラー ウィンドウが表示されます。 ここに画像の説明を入力

clickhereリンクをクリックすると、下の画像が表示されます。 ここに画像の説明を入力

コードをデバッグすると、下の画像が表示されます。 ここに画像の説明を入力

それが私のコードの問題なのか、OSのインストールの問題なのかわかりません。助けてください。私のアプリケーションはどこでもすべてのOSで実行されますが、コンピューターの1つだけでエラーが発生するためです。

コードを以下に示します。

rem->m_operationInProgress = false;
delete rem;  // from where error occur.
printf("after deleted.."); //this is not execute.

デストラクタは次のとおりです。

test::~test()
{
        printf("\n Enter in destructor.. ");

//  
//  m_isRunning = false;
//  Sleep(1000);

//  //-------------------------------------------- 1_4_2012
//  printf("\nCalling m_dataCollection->shutDown()");
////    printf("\n****calling  m_connect.shutDown();****");
//      printf("\nRPA :: 11....");
//  m_connect.shutDown();
//      printf("\nRPA :: 12....");
//  //printf("\n****after m_connect.shutDown();****");
//          printf("\nRPA :: 13....");
//  if(m_device != NULL)
//  {
//      //printf("\n****before delete  m_device;****");
//      printf("\nRPA :: 14....");
//      delete m_device;
//      printf("\nRPA :: 15....");
//      //printf("\n****after delete  m_device;****");
//  }
printf("\n Exited from destructor.. "); // this is also print on console.

}

print f の両方を正常に実行してからクラッシュしました。

4

1 に答える 1

1

テストしているマシンと、テストした「数百台のマシン」との違いを教えていただけますか? あなたのアプリはマルチスレッド化されているようで、特にテスト対象のコンピューターが低速でシングルコアの場合は、処理中の操作を false に設定しても、すべてのスレッドがすぐに終了するようには見えません。そのため、他のスレッドがまだ使用している間に、ポインターを時期尚早に削除する可能性があります。したがって、デストラクタが呼び出される理由ですが、遅いスレッドがどこかで起動し、長い間削除されていたポインタを使用しようとします。

すべてのスレッドが終了するまでポインターが削除されないようにするには、おそらくポインターにロックを追加する必要があります。

于 2012-04-25T08:59:01.523 に答える