c++ - 破坏空指针时的访问冲突

标签 c++ destructor access-violation null-pointer

我遇到的问题是,当我的类 CLimb 运行其析构函数时,如果成员 *parentNULL在调用析构函数之后但在执行正文之前,我得到一个“访问冲突写入位置 0xcccccccc” 错误。

肢体.h

class CLimb
{
public:
    CLimb(void);
    CLimb(CLimb *_parent);
    ~CLimb(void);

    float cut;
    float bone;
    float resistance;

    CLimb *parent;
};

肢体.cpp

#include "limb.h"


CLimb::CLimb(void) :
    cut(0),
    bone(0),
    resistance(0)
{
    parent = NULL;
}

CLimb::CLimb(CLimb *_parent) :
    cut(0),
    bone(0),
    resistance(0)
{
    parent = _parent;
}

CLimb::~CLimb(void)
{
}

我也想知道我是否有 2 个实例,limb01limb02 , 其中limb02limb01 的父级, 如果 limb02被删除limb01->parent现在指向一个不正确的地址。我将如何解决这个问题?我需要添加 *child 吗?还有指针?

最佳答案

智能指针是一种解决方案。特别是,您可以在此处使用弱指针。当指向的对象的引用计数下降到零时(即当它被删除时),弱指针会自动重置。

关于c++ - 破坏空指针时的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062735/

相关文章:

c++ - 混合 std::cout 的奇怪输出

还包括现有变量的 C++17 结构化绑定(bind)

c++ - 正确销毁 std::map 中的指针

c++ - 我需要删除析构函数中的基本数据类型吗? C++

当变量仍然存在时调用 C++ 析构函数

c++ - 删除多个字符指针

c++ - 面对 SIGTERM 的信号处理程序问题

将 SDL_ttf 与 SDL 和 SDL2 一起使用时出现 C++ 访问冲突

c++ - 每当我更改 QTableWidget.item(row, col) 时发生访问冲突

c++ - Opencv Mat - 访问冲突错误 C++