shared_ptrが破棄されたときのヒープの破損

エルフェンダール

次のサンプルコードを検討します。

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を使用しています。

Arno Duvenhage

コードに問題はありません。短いコンソールプログラムで動作する場合、エラーはおそらくプログラムの他の部分にあります。エラーがなくなるまで、プログラムの他の部分を体系的にチェックする必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

c ++前のステップで例外がスローされたときに、std :: shared_ptrによるポインター参照が破棄されるのはなぜですか

分類Dev

ヒープの破損が検出されましたか?

分類Dev

ヒープの破損が検出されました| C

分類Dev

印刷しようとしたときのヒープの破損

分類Dev

ヒープ破損が検出されました-iPhone5Sのみ

分類Dev

クラス内のいくつかの配列でdelete []を呼び出しているときに「ヒープ破損が検出されました」-C ++

分類Dev

iOSエラー:ヒープの破損が検出され、空きリストが破損し、ガード値が正しくありません:0

分類Dev

基本クラスのboost :: shared_ptrが指すオブジェクトが破棄されることはありません

分類Dev

ヒープ破損が検出されましたMalloc()Free()

分類Dev

C-アレイを解放するときにヒープ破損が検出されました

分類Dev

エラーc ++アサーションの失敗ヒープの破損が検出されました

分類Dev

検出されたヒープ破損:通常のブロック後()

分類Dev

C ++:通常のブロック後にヒープの破損が検出されました

分類Dev

C ++:通常のブロック後にヒープの破損が検出されました

分類Dev

通常のブロック後にヒープの破損が検出されました(#181)

分類Dev

ヒープの破損が検出されました:通常のブロック後(#176)

分類Dev

通常のブロック #63 の後にヒープ破損が検出されました

分類Dev

ヒープの破損により、C ++でエラーが検出されました

分類Dev

デバッグエラー:ヒープの破損が検出されました

分類Dev

デストラクタでヒープの破損が検出されました

分類Dev

shared_ptrの割り当ては、 `this`ポインタを破棄できますか?

分類Dev

ゲームオブジェクトが破棄されたときのunity5のnull参照例外

分類Dev

2D動的配列を解放するときのヒープの破損

分類Dev

2D動的配列を解放するときのヒープの破損

分類Dev

ヒープ破損の問題-C

分類Dev

EFCore 5.0:DbContextが破棄されたときにトラッカーを変更する(DbContextの有効期間)

分類Dev

C ++の多重継承とアップキャストされたスマートポインターの破壊により、VS2017でヒープが破損します

分類Dev

タスクバーから開いたときのWindows10explorer.exeヒープ破損ntdll.dll

分類Dev

監視対象のノードが破棄されると、MutationObserverは破棄されますか?

Related 関連記事

  1. 1

    c ++前のステップで例外がスローされたときに、std :: shared_ptrによるポインター参照が破棄されるのはなぜですか

  2. 2

    ヒープの破損が検出されましたか?

  3. 3

    ヒープの破損が検出されました| C

  4. 4

    印刷しようとしたときのヒープの破損

  5. 5

    ヒープ破損が検出されました-iPhone5Sのみ

  6. 6

    クラス内のいくつかの配列でdelete []を呼び出しているときに「ヒープ破損が検出されました」-C ++

  7. 7

    iOSエラー:ヒープの破損が検出され、空きリストが破損し、ガード値が正しくありません:0

  8. 8

    基本クラスのboost :: shared_ptrが指すオブジェクトが破棄されることはありません

  9. 9

    ヒープ破損が検出されましたMalloc()Free()

  10. 10

    C-アレイを解放するときにヒープ破損が検出されました

  11. 11

    エラーc ++アサーションの失敗ヒープの破損が検出されました

  12. 12

    検出されたヒープ破損:通常のブロック後()

  13. 13

    C ++:通常のブロック後にヒープの破損が検出されました

  14. 14

    C ++:通常のブロック後にヒープの破損が検出されました

  15. 15

    通常のブロック後にヒープの破損が検出されました(#181)

  16. 16

    ヒープの破損が検出されました:通常のブロック後(#176)

  17. 17

    通常のブロック #63 の後にヒープ破損が検出されました

  18. 18

    ヒープの破損により、C ++でエラーが検出されました

  19. 19

    デバッグエラー:ヒープの破損が検出されました

  20. 20

    デストラクタでヒープの破損が検出されました

  21. 21

    shared_ptrの割り当ては、 `this`ポインタを破棄できますか?

  22. 22

    ゲームオブジェクトが破棄されたときのunity5のnull参照例外

  23. 23

    2D動的配列を解放するときのヒープの破損

  24. 24

    2D動的配列を解放するときのヒープの破損

  25. 25

    ヒープ破損の問題-C

  26. 26

    EFCore 5.0:DbContextが破棄されたときにトラッカーを変更する(DbContextの有効期間)

  27. 27

    C ++の多重継承とアップキャストされたスマートポインターの破壊により、VS2017でヒープが破損します

  28. 28

    タスクバーから開いたときのWindows10explorer.exeヒープ破損ntdll.dll

  29. 29

    監視対象のノードが破棄されると、MutationObserverは破棄されますか?

ホットタグ

アーカイブ