-1

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

当应用程序崩溃时显示错误窗口, 在此处输入图像描述

如果我点击 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 然后崩溃了。

4

1 回答 1

1

你能告诉我们你正在测试的机器和你测试过的“数百台机器”之间的区别吗?您的应用程序似乎是多线程的,并且将 operation-in-progress 设置为 false 似乎不会立即告诉所有线程退出,尤其是在被测计算机速度缓慢且单核的情况下。所以你可能过早地删除了指针,而其他线程仍在使用它。因此调用了析构函数,但随后缓慢的线程在某处唤醒并尝试使用早已被删除的指针。

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

于 2012-04-25T08:59:01.523 回答