Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在C++。网络4_.net_C++_.net 4.0_Clr_Debugging - Fatal编程技术网

.net 在C++。网络4

.net 在C++。网络4,.net,c++,.net-4.0,clr,debugging,.net,C++,.net 4.0,Clr,Debugging,我有一个从.net3.5迁移到.net4.0的WPF应用程序。这个应用程序使用了一个旧的C++库(我理解这是混合模式库,管理非托管的方法)。库移动到.net4环境,在回调调用时出现一些奇怪的错误: if (m_pCANCallback) m_pCANCallback(m_pCANCallbackPtr, &rxData); 如果附加了VS调试器,则会正确传递rxData 若我在并没有调试器的情况下启动应用程序,它将传递NULL 以下是回

我有一个从.net3.5迁移到.net4.0的WPF应用程序。这个应用程序使用了一个旧的C++库(我理解这是混合模式库,管理非托管的方法)。库移动到.net4环境,在回调调用时出现一些奇怪的错误:

            if (m_pCANCallback)
            m_pCANCallback(m_pCANCallbackPtr, &rxData); 
如果附加了VS调试器,则会正确传递rxData 若我在并没有调试器的情况下启动应用程序,它将传递NULL

以下是回调函数防御:

void USBCANAdapter::CANDataCallback( void *pThis, RxData *pRxData )
因此,在这个函数体中,pRxData等于NULL,但它只在没有调试器的情况下发生,并且只在.net4环境中发生

以防万一,回调初始化:

m_pUsbCan->DefineCANMsgCallback( (TUsbCallback)USBCANAdapter::CANDataCallback );

    void CUsbFt::DefineCANMsgCallback(TUsbCallback pCallback, void *pCallbackPtr)
{
    m_pCANCallback = pCallback;
    m_pCANCallbackPtr = pCallbackPtr;
}

谢谢你的建议

根据我的经验,在调试器中工作,但调试器之外出现故障的情况下,100%的情况下,原因是函数本地数组溢出

更新:例如,这样做会导致该问题:

 USBCANAdapter::CANDataCallback( void *pThis, RxData *pRxData ) 
 {
       char title[5];
       strcpy(title, "1234567890");
       // :
 }

(或者overun可能在调用过程中…)

是真的存在调试器还是缺少调试器,还是调试配置还是发布配置?在调试配置或发布配置中没有调试器时,问题会再次出现。因此,存在调试器与不存在调试器是正确的,请尽可能提高编译器上的警告级别。现在确保代码编译时没有警告。问题将消失。谢谢,问题已解决,原因是内存已损坏。现在我明白了这个建议的价值。杰姆斯,你能解释一下你的意思吗?哇,C++编程比我想象的还要硬。谢谢你的回答