2012-04-25 2 views
-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. 

을 소멸자는 :

코드는 아래 주어진 후 분쇄 f를

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. 

} 

는 성공적, 인쇄를 실행한다.

+0

디버거에서 프로그램을 실행 해 보셨습니까? –

+8

코드가 많아 이미지가 적습니다. – KillianDS

+0

이미 "백개의 기계"에서 코드를 테스트 했으므로 동일한 오류가 발생하지 않았으므로 분명히이 특정 기계에 문제가 있습니다. 시스템 파일이나 버전이 일치하지 않는 것 같습니다. – Aziz

답변

1

테스트중인 기계와 테스트 한 수백 대의 기계 사이의 차이점을 말씀해 주시겠습니까? 응용 프로그램이 멀티 스레드로 보이고 진행중인 작업을 false로 설정하면 특히 테스트중인 컴퓨터가 느리고 단일 코어 인 경우 모든 스레드가 종료되도록 지시하지 않는 것 같습니다. 따라서 다른 스레드가 여전히 포인터를 사용하고있는 중에는 포인터를 너무 일찍 삭제할 수 있습니다. 따라서 소멸자가 호출되었지만 느린 스레드가 어딘가에서 깨어나 포인터를 사용하려고 시도하는 이유가 오랫동안 삭제되었습니다.

포인터에 잠금을 추가하여 모든 스레드가 종료 될 때까지 포인터가 삭제되지 않도록해야합니다.

+0

나는 그것이 문제일지도 모른다고 생각하고 실행중인 모든 스레드에 대해 주석을 달았습니다. 그러나 또한 동일한 문제를주고 있습니다.이 응용 프로그램은 windows xp, windows 7, windows vista, 512 to 3GB ram과 같은 모든 유형의 컴퓨터에서 테스트됩니다. 오류는 발생하지 않습니다. –

+0

내가이 터무니없는 문제를 겪은 유일한 이유는 스레딩 때문이었습니다. 아마도 다른 원인이있을 수 있습니다. – maress