次のサンプルコードを検討します。
Uncopyable.h
class Uncopyable {
protected:
Uncopyable() {}
~Uncopyable() {}
private:
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
Base.h
class Base : private Uncopyable
{
public:
Base(int a);
virtual ~Base();
private:
int mValBase;
};
Base.cpp
Base::Base(int a)
: mValBase(a)
{
}
Base::~Base()
{
}
Derived.h
class Derived : public Base
{
public:
Derived(int a, int b);
~Derived();
private:
int mValDerived;
};
Derived.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の破棄時に、ヒープの破損(「CRTがヒープバッファの終了後にアプリケーションがメモリに書き込んだことを検出しました」)が発生しますderived
。ただし、mValDerived
のコンストラクタでの初期化を削除しても、Derived
ヒープの破損は発生しません。また、上記のクラスとコードを非常に短いコンソールアプリケーションに挿入しても、ヒープが破損することはありません。
誰かが私が問題が何であるか、そしてそれをどのように修正するかを理解するのを手伝ってくれる?私は途方に暮れています。
VS2012を使用しています。
コードに問題はありません。短いコンソールプログラムで動作する場合、エラーはおそらくプログラムの他の部分にあります。エラーがなくなるまで、プログラムの他の部分を体系的にチェックする必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加