gpt4 book ai didi

c++ - shared_ptr 被销毁时堆损坏

转载 作者:行者123 更新时间:2023-11-30 04:07:42 25 4
gpt4 key购买 nike

考虑以下示例代码:

不可复制.h

class Uncopyable {
protected:
Uncopyable() {}
~Uncopyable() {}

private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};

基础.h

class Base : private Uncopyable
{
public:
Base(int a);

virtual ~Base();

private:
int mValBase;
};

基础.cpp

Base::Base(int a)
: mValBase(a)
{
}

Base::~Base()
{
}

派生.h

class Derived : public Base
{
public:
Derived(int a, int b);

~Derived();

private:
int mValDerived;
};

派生.cpp

Derived::Derived(int a, int b)
: Base(a),
mValDerived(b)
{
}

Derived::~Derived()
{
}

当我插入以下代码块时(此处未显示所有代码)

{
std::shared_ptr<Derived> derived = std::shared_ptr<Derived>(new Derived(1, 2));
}

我在退出代码块和销毁 shared_ptr derived 时遇到堆损坏(“CRT 检测到应用程序在堆缓冲区结束后写入内存”)。但是,如果我在 Derived 的构造函数中删除 mValDerived 的初始化,我就不会出现堆损坏。此外,如果我将上述类和代码插入到一个非常短的控制台应用程序中,我不会发生堆损坏。

任何人都可以帮助我了解问题所在以及解决方法吗?我很茫然。

我正在使用 VS2012。

最佳答案

我没有发现代码有任何问题。如果它在一个简短的控制台程序中工作,则错误可能在您程序的其他部分。您必须系统地检查程序的其他部分,直到错误消失。

关于c++ - shared_ptr 被销毁时堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com