C++ c+中的堆损坏错误+;

C++ c+中的堆损坏错误+;,c++,crash,heap-memory,C++,Crash,Heap Memory,我在其中一台计算机上遇到运行时错误。我已经在上百台机器上测试了我的应用程序,但没有得到任何错误。错误窗口如下所示 当应用程序崩溃时,会显示错误窗口, 若我点击clickhere链接,它会显示下图。 如果我调试代码,它将显示在下图中。 我不知道这是我的代码中的问题,或者操作系统安装中的任何问题,请帮助我。因为我的应用程序在任何地方和所有操作系统上运行,但只在一台计算机上出错 代码如下: rem->m_operationInProgress = false; delete rem; /

我在其中一台计算机上遇到运行时错误。我已经在上百台机器上测试了我的应用程序,但没有得到任何错误。错误窗口如下所示

当应用程序崩溃时,会显示错误窗口,

若我点击clickhere链接,它会显示下图。

如果我调试代码,它将显示在下图中。

我不知道这是我的代码中的问题,或者操作系统安装中的任何问题,请帮助我。因为我的应用程序在任何地方和所有操作系统上运行,但只在一台计算机上出错

代码如下:

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,然后崩溃。

您能告诉我们您正在测试的机器与您测试的“数百台机器”之间的区别吗?您的应用程序似乎是多线程的,并且将正在进行的操作设置为false似乎不会立即通知所有线程退出,尤其是当被测计算机速度较慢且为单核时。因此,当其他线程仍在使用该指针时,您可能会过早地删除该指针。这就是为什么调用析构函数,但随后一个缓慢的线程在某处醒来并尝试使用早已删除的指针的原因


您可能需要在指针上添加锁,以确保在所有线程退出之前不会删除该指针。

您是否尝试在调试器中运行程序?代码越多,图像越少。因为您已经在“机器的百分之一百”上测试了代码,并且没有一个生成相同的错误,这显然是这台特定机器的问题。可能是系统文件有问题或版本不匹配。@JoachimPileborg:我没有附加任何调试器。如果你有任何想法,请告诉我。@KillianDS:当从类的析构函数返回时,即使我已经注释了析构函数中的所有代码,它也会崩溃。我认为这可能是问题所在,我注释了所有正在执行的线程。但是也会出现同样的问题。这个应用程序在所有类型的机器上都进行了测试,比如WindowsXP、Windows7、WindowsVista,并且有512到3GB的内存。我唯一一次遇到这个荒谬的问题是因为线程问题。可能还有其他原因