访问 ccomptr 指针和应用程序崩溃时访问冲突(c 系统异常代码:c0000005)

Posted

技术标签:

【中文标题】访问 ccomptr 指针和应用程序崩溃时访问冲突(c 系统异常代码:c0000005)【英文标题】:access violation (c system exception code : c0000005 ) while accessing ccomptr pointer and application got crash 【发布时间】:2011-09-20 12:29:32 【问题描述】:

访问计算机时出现访问冲突错误。 该错误不一致,只能在尝试访问大量数据时重现。 我有 2900 个组件,每个组件我都调用一个函数。在这个函数中,我正在访问一个计算机,而这个应用程序在随机位置崩溃,如 200、210、2500 等。崩溃时的位置不固定。

此问题特定于具有以下配置的系统: 窗口服务器 2003 R2 至强 CPU , 2.66 GHz 2 GB 内存

这是我的代码

XGGraphicAttribute* pAttr = pExtraGraphicInfo->GetAttribute();
if(pAttr)

    DBAttributes* db_attributes = NULL;

    db_attributes = static_cast<DBAttributes*> (pAttr->GetDBAttributes());

    CComPtr<IEPGraphicData> pIEPGraphicData;

    if(db_attributes)
    
        pIEPGraphicData = db_attributes->GetGraphicData(); // here my app got crashed 
    




IEPGraphicData* DBAttributes::GetGraphicData () const

    return m_pIEPGraphicData;

【问题讨论】:

db_attributes 的值是多少? 调用是否从一个 DLLL 转到另一个? 1. m_pIEPGraphicData 是一个 CComPtr,它分配给 pIEPGraphicData,它也是 CComPtr 的一种类型。 2. db_attributes 是一个 DBAttributes 类指针。 3.调用不去其他dll调用。 这里为什么需要 static_cast - pAttr->GetDBAttributes() 实际返回什么类型? 【参考方案1】:

可能性:

    GetGraphicData() 返回的对象可能不支持 IEPGraphicData 接口。我希望智能指针分配会导致空指针,而不是访问冲突。

    已从您的脚下删除了 db_attributes 对象。

【讨论】:

以上是关于访问 ccomptr 指针和应用程序崩溃时访问冲突(c 系统异常代码:c0000005)的主要内容,如果未能解决你的问题,请参考以下文章

取消引用已删除的指针总是会导致访问冲突?

glGenBuffers 为 NULL,在使用 glew 时给出 0x0000000 访问冲突

C ++:将void *转换为基类指针时访问冲突

我在删除指针时遇到读取访问冲突[关闭]

当引入参数时,从指针调用成员函数的 C++ 调用内存访问冲突

Windows C++ 程序中的访问冲突总是会立即崩溃吗?