プログラムが押しつぶされている理由

Antutu Cat
  #include <iostream>

    using namespace std;

    class Shallow {
    private:
        int *data;
    public:
        void set_data_value(int d) { *data = d; }
        int get_data_value() { return *data; }
        // Constructor
        Shallow(int d);
        // Copy Constructor
        Shallow(const Shallow &source);
        // Destructor
        ~Shallow();
    };

    Shallow::Shallow(int d) {
        data = new int;
        *data = d;
    }

    Shallow::Shallow(const Shallow &source) 
        : data(source.data) {
            cout << "Copy constructor  - shallow copy" << endl;
    }

    Shallow::~Shallow() {
        delete data;
        cout << "Destructor freeing data" << endl;
    }

    void display_shallow(Shallow s) {
        cout << s.get_data_value() << endl;
    }

    int main() {

        Shallow obj1 {100};
        display_shallow(obj1);

ここまで大丈夫です
浅いobj2 {obj1}; ここで私のプログラムはokobj2.set_data_value(1000);を停止します。enter code hereこの時点で誰かがこれを私に説明できますか?
0を返します。}私のプログラムの最後に何かがうまくいかない

スペンサー

問題は、を呼び出すたびShallow::~Shallowdataポインタのメモリが削除されるが、新しいすべての呼び出しがShallow新しいメモリブロックを割り当てるわけではないことです。すべてdeleteが正確に1つに対応する必要がありますnewだが

display_shallow(obj1);

1)ポインタを使用する新しい一時Shallowオブジェクト(display_shallow値で渡す)を作成dataますobj1

2)一時を破棄します。これにより、一時との両方で使用されているメモリのブロックが削除されます。 obj1

obj2またobj1、のポインタも共有しますが、これはもうどこも指していません。を呼び出そうとするとobj2.set_data_value(1000)、無効なポインタが逆参照されます。これは未定義の動作です。核ミサイルを発射するのではなく、プログラムが単にクラッシュしただけで幸運だと考えるべきです。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

ggvisスライダーが押しつぶされている

分類Dev

プログラムでUIViewを追加しようとすると、UITableViewCellの高さが自動調整されません(代わりにUIViewが押しつぶされます)

分類Dev

ScrollViewによって押しつぶされているContentView

分類Dev

プログラムがループして印刷されない理由がわかりません

分類Dev

プログラムが繰り返されている-理由がわからない

分類Dev

私のプログラムがそのように実行されている理由がわかりません

分類Dev

Highcharts の複数の系列のデータが、2 番目の線グラフが押しつぶされて表示されていますか?

分類Dev

scanf( "%d"、&variable); いくつかのスペースバーの後でEnterをクリックした後、プログラム全体が正しく実行されている間、スペースバーを押しても停止しません

分類Dev

このC ++プログラムがCodeBlocksに準拠して実行される理由

分類Dev

すでに購読しているプログラムが表示されない

分類Dev

塗りつぶされた図形と塗りつぶされていない図形をドラッグアンドドロップする[宿題]

分類Dev

N-commitを押しつぶしてもGitコミットテンプレートが表示されない

分類Dev

塗りつぶされた長方形を描くための非常に単純なプログラム..なぜそれが機能しないのですか?

分類Dev

ブートストラップ列が押しつぶされた

分類Dev

プログラムで作成された新しいボタンが押されたときにセグエする方法は?

分類Dev

Altキーを押しながらTabキーを押してプログラムまたはウィンドウを切り替えるか、タスクバーをクリックしても、visibilitychangeイベントがトリガーされない

分類Dev

プログラムでUINavigationControllerを押した後、トップバーが表示されない

分類Dev

Cプログラムでメモリが割り当てられて使用されるのはいつですか?

分類Dev

Swift-BarButtonItemが押されたときにプログラムでUIPickerViewを作成して表示します

分類Dev

Windows上でいくつかのexeプログラムが実行されているかどうかを確認してください

分類Dev

カードのグリッドで検索を実行すると、ブートストラップカードが押しつぶされます

分類Dev

ラベル画像が押されるまでJava一時停止プログラム

分類Dev

スペースを押すたびに、新しい pygame ウィンドウがポップアップするようにしたいと思います。しかし、スペースを押すたびにプログラムにいくつかのエラーが表示されます

分類Dev

Android:プログラムによるImageButtonの押されていない状態の色

分類Dev

条件が満たされていないのにプログラムが停止している

分類Dev

nextInt()でぶら下がっている基本的なプログラム

分類Dev

Javaでプログラム的にウィザードページのヘルプボタンが押されているかどうかを確認する方法

分類Dev

プログラムが停止する理由を見つけるにはどうすればよいですか?

分類Dev

アップストリームをマージするときにGitコミットが押しつぶされました。ローカルリポジトリを更新するにはどうすればよいですか?

Related 関連記事

  1. 1

    ggvisスライダーが押しつぶされている

  2. 2

    プログラムでUIViewを追加しようとすると、UITableViewCellの高さが自動調整されません(代わりにUIViewが押しつぶされます)

  3. 3

    ScrollViewによって押しつぶされているContentView

  4. 4

    プログラムがループして印刷されない理由がわかりません

  5. 5

    プログラムが繰り返されている-理由がわからない

  6. 6

    私のプログラムがそのように実行されている理由がわかりません

  7. 7

    Highcharts の複数の系列のデータが、2 番目の線グラフが押しつぶされて表示されていますか?

  8. 8

    scanf( "%d"、&variable); いくつかのスペースバーの後でEnterをクリックした後、プログラム全体が正しく実行されている間、スペースバーを押しても停止しません

  9. 9

    このC ++プログラムがCodeBlocksに準拠して実行される理由

  10. 10

    すでに購読しているプログラムが表示されない

  11. 11

    塗りつぶされた図形と塗りつぶされていない図形をドラッグアンドドロップする[宿題]

  12. 12

    N-commitを押しつぶしてもGitコミットテンプレートが表示されない

  13. 13

    塗りつぶされた長方形を描くための非常に単純なプログラム..なぜそれが機能しないのですか?

  14. 14

    ブートストラップ列が押しつぶされた

  15. 15

    プログラムで作成された新しいボタンが押されたときにセグエする方法は?

  16. 16

    Altキーを押しながらTabキーを押してプログラムまたはウィンドウを切り替えるか、タスクバーをクリックしても、visibilitychangeイベントがトリガーされない

  17. 17

    プログラムでUINavigationControllerを押した後、トップバーが表示されない

  18. 18

    Cプログラムでメモリが割り当てられて使用されるのはいつですか?

  19. 19

    Swift-BarButtonItemが押されたときにプログラムでUIPickerViewを作成して表示します

  20. 20

    Windows上でいくつかのexeプログラムが実行されているかどうかを確認してください

  21. 21

    カードのグリッドで検索を実行すると、ブートストラップカードが押しつぶされます

  22. 22

    ラベル画像が押されるまでJava一時停止プログラム

  23. 23

    スペースを押すたびに、新しい pygame ウィンドウがポップアップするようにしたいと思います。しかし、スペースを押すたびにプログラムにいくつかのエラーが表示されます

  24. 24

    Android:プログラムによるImageButtonの押されていない状態の色

  25. 25

    条件が満たされていないのにプログラムが停止している

  26. 26

    nextInt()でぶら下がっている基本的なプログラム

  27. 27

    Javaでプログラム的にウィザードページのヘルプボタンが押されているかどうかを確認する方法

  28. 28

    プログラムが停止する理由を見つけるにはどうすればよいですか?

  29. 29

    アップストリームをマージするときにGitコミットが押しつぶされました。ローカルリポジトリを更新するにはどうすればよいですか?

ホットタグ

アーカイブ