软件以前运行都是正常的,但是昨天加了一段代码,运行都正常,但是软件一旦结束,退出后就会弹出如下的对话框:
Debug Assertion Failed!
Program:D:\MFC\Debug\test.exe
File:cmdtarg.cpp
Line:52
For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts
(Press Retry to debug the application)添加的代码如下:
double CWinCltView::ADCodeToVoltage(int gain, int polarity, int range, short int temp)
{
double  min_voltage, max_voltage;
double scale;
double  voltage;

if (polarity==0) /*Bipolar*/
{
if (range==0) /*+-5v*/
{
min_voltage = -5.0;
max_voltage = 5.0;
}
else /*+-10v*/
{
min_voltage = -10.0;
max_voltage = 10.0;
}
}
else /*Unipolar*/
{
min_voltage = 0.0;
max_voltage = 10.0;
}

scale = max_voltage;

if (polarity==0) /*Bipolar*/
{
voltage = ((double)temp / (double)32768)*scale;
}
else /*Unipolar*/
{
voltage = ((double)(temp+32768) / (double)65536)*scale;
}

if (gain>0)
voltage = (voltage / (1 << gain));

return voltage;
}调用的代码:
float data = (float)ADCodeToVoltage(gain,polarity,range,temp);我觉得问题不在添加的这段代码上,但是又搞不清楚该如何找到问题的所在,
还请高人指点。

解决方案 »

  1.   

    Press Retry to debug the application
      

  2.   

    按照Mackz的方法 就进入到MFC的内部代码了,
    内功太差看不明白  但是觉得问题不会在这些内部的代码中。
      

  3.   

    软件以前运行都是正常的
    ------------------------
    以前用的是RELESE 还是DEBUG 版本?
      

  4.   

    断言失败,按“Retry”后看调用堆栈,定位到自己写的代码中看是哪儿出错。
      

  5.   

       这种错误都是跟从程序,debug调试解决的,这样也能锻炼一个能的调试程序的能力.
      lz试试吧.
      

  6.   

       CCmdTarget::~CCmdTarget()
    {
    #ifndef _AFX_NO_OLE_SUPPORT
    if (m_xDispatch.m_vtbl != 0)
    ((COleDispatchImpl*)&m_xDispatch)->Disconnect();
    ASSERT(m_dwRef <= 1);
    #endif
    #ifdef _AFXDLL
    m_pModuleState = NULL;
    #endif
    }
     52行是这样的,ASSERT(m_dwRef <= 1);你用release版本估计是没有问题的.在这个版本assert宏不起作用,但是可能会存在其他的资源问题没有处理好.
      

  7.   

    大概的可能:
    1、非法指针访问,例如数组下标越界或者内存指针使用错误
    2、访问已经释放的对象
    3、其他逻辑错误导致ASSERT失败,这个很难说
      

  8.   

    我跟lz问题一样~我是定义一个cstring类型的变量,不管使用否在关闭程序的时候都是这个错误,郁闷啊~cstring应该不存在释放的问题啊