• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:new演算子で困っています。)

new演算子で困っています

このQ&Aのポイント
  • 基底クラスclass1と派生クラスclass2でnewを使って同じサイズの2次元配列pとqを作ったのですが、メモリ内の同じ場所を参照してるみたいで、class2の配列qで配列の中身を書き換えたら、class1の配列pの中身も書き換えられているんですが、対処法があれば教えてください。
  • class1とclass2で作成した2次元配列のメモリ参照問題について困っています。class2で配列の中身を書き換えたら、class1の配列も書き換えられてしまう現象が起きています。解決策をご教示いただけますでしょうか。
  • new演算子に関する問題です。class1とclass2で同じサイズの2次元配列を作成しましたが、class2で配列の中身を変更するとclass1の配列も変更されてしまいます。この問題の対処方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • wr250zb
  • ベストアンサー率41% (7/17)
回答No.2

こうだと思う。 class CClassA { protected: int** p; int _nCntA; public: CClassA( int n ) { _nCntA = n; p = new int*[ n ]; // ポインタ配列を確保 for( int ii = 0; ii < n; ii++ ){ p[ ii ] = new int[ _nCntA ]; } } // デストラクタは省略 }; class CClassB : public CClassA { protected: int** q; public: CClassB( int n ) : CClassA( n ) { q = new int*[ n ]; // ポインタ配列を確保 for( int ii = 0; ii < n; ii++ ){ q[ ii ] = new int[ 2 ]; } } // デストラクタは省略 };

1025
質問者

お礼

できました。たすかりました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • wr250zb
  • ベストアンサー率41% (7/17)
回答No.1

最初にclass1::pとclass2::q(ポインタのポインタが指している先)がまだ不定なのにnew int[n]でアドレスをセットしているように見受けられますけど? pとqの値(アドレス)によってはフリーズしちゃうと思います。 ためしてないけど。。。

1025
質問者

補足

どうすればよいですか?

すると、全ての回答が全文表示されます。

関連するQ&A