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

Posted

技术标签:

【中文标题】我在删除指针时遇到读取访问冲突[关闭]【英文标题】:I'm getting read access violation while deleting pointer [closed] 【发布时间】:2016-01-19 09:36:41 【问题描述】:
C03View::~C03View()


    delete pBrush_;//this causes read access violation.  

抛出异常:读取访问冲突。 this->pBrush_-> 是 0xDDDDDDDD。

我的代码中只有一个地方初始化了这个对象:

void C03View::OnInitialUpdate()

    CScrollView::OnInitialUpdate();
    pRenderTarget_ = GetRenderTarget();
    pBrush_ = new CD2DSolidColorBrush(GetRenderTarget(),   
                                           D2D1::ColorF(D2D1::ColorF::Blue));

这个项目是一个 MFC 项目。

非常感谢任何帮助。

【问题讨论】:

它可能被不相关的溢出覆盖(它发生在我见过的一些代码中)。在 pBrush_ 上设置观察点以检测谁更改了它的值。 你确定你不在代码的其他地方delete pBrush_ 吗? VS 使用位模式0xDDDDDDDD 来标记已释放的内存。 @BlackDwarf 绝对不会在其他任何地方删除它。代码只是一个小的启动项目,所以我可以确定。 @LucaPizzamiglio 你如何在 VS 中设置观察点?你是说断点吗? @Thereisnothingwecando 在VS的断点面板中应该可以设置watchpoint,一种断点,如果特定内存区域的值发生变化就会中断执行 【参考方案1】:

可能的情况:

    pBrusch_ 在构造 C03View 时未初始化且从未分配(从未调用 OnInitialUpdate) pBrusch_ 因内存损坏而被覆盖 pBrusch_ 之前已被删除,但之后未设置为 NULL pBrusch_ 在自己的析构函数中崩溃 C03View 的对象已损坏或未分配,但调用了析构函数 ...

【讨论】:

以上是关于我在删除指针时遇到读取访问冲突[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

task2.exe 中 0x001066F6 处未处理的异常:0xC0000005:访问冲突读取位置 0x0000000C [关闭]

访问冲突读取位置0x00000002 [关闭]

当我通过删除临时节点来释放内存时,我遇到了读取访问冲突。但只有当我返回虚假陈述时

C 读取访问冲突 - 指针

0x00840bd7 处的访问冲突:读取地址 0x00000000'。过程......(5644)“ [关闭]

我想使用指针和双指针读取 n 个字符串,我得到一个奇怪的错误,访问违规写入位置 [关闭]