2012-04-25 27 views
-1

マシンの1つでランタイムエラーが発生しました。何百ものマシンで私のアプリケーションをテストしましたが、何らかのエラーが出ません。エラーウィンドウを以下に示します。C++のヒープ破損エラー

クラッシュアプ​​リケーションが enter image description here

、エラーウィンドウを表示し、私はclickhereリンクをクリックした場合、それは画像の下に表示されます。 enter image description here

コードをデバッグすると、次のイメージが表示されます。 enter image description here

私のコードに問題があるか、OSのインストールに問題があるかどうかわかりません。私のアプリケーションはどこでも、すべてのOSで動作しますが、コンピュータのいずれかでエラーが発生するためです。

コードを以下に示す:

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. 

} 

次いでクラッシュfは、それが正常に両方の印刷を実行します。

+0

プログラムをデバッガで実行しようとしましたか? –

+8

コードの数が増え、画像が少なくなります。 – KillianDS

+0

"100台のマシン"でコードをテストしていて、どれも同じエラーを生成していないので、明らかにこの特定のマシンに問題があります。システムファイルやバージョンの不一致が原因かもしれません。 – Aziz

答えて

1

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

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

+0

私はそれが問題かもしれないと思って、私は実行しているすべてのスレッドにコメントしました。同じ問題を与えます。このアプリケーションは、Windows XP、Windows 7、Windows Vistaなどのすべてのタイプのマシンでテストされ、512〜3GB RAMを搭載しています。エラーは表示されません。 –

+0

私がこの不条理な問題に遭遇した唯一の時間はスレッディングのためでした。おそらくそこには他の原因があります – maress