OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

new演算子で困っています。

  • すぐに回答を!
  • 質問No.208469
  • 閲覧数36
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 68% (15/22)

基底クラスclass1と派生クラスclass2でnewを使って同じサイズの2次元配列pとqを作ったのですが、メモリ内の同じ場所を参照してるみたいで、class2の配列qで配列の中身を書き換えたら、class1の配列pの中身も書き換えられているんですが、対処法があれば教えてください。

class class1{
protected:
     int** p;
public:
    class1(int n)
    {
  int i;
       *p=new int[n];
       for(i=0;i<n;i++){
         p[i]=new int[2];
       }
     }
   :
   :
};
class class2 : public class1{
    int** q;
public:
    class2(int n)
    {
  int i;
       *q=new int[n];
       for(i=0;i<n;i++){
        q[i]=new int[2];
       }
}
   :
   :
};
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル7

ベストアンサー率 41% (7/17)

こうだと思う。

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

お礼率 68% (15/22)

できました。たすかりました。ありがとうございました。
投稿日時 - 2002-01-30 19:21:28
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル7

ベストアンサー率 41% (7/17)

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

ためしてないけど。。。
補足コメント
1025

お礼率 68% (15/22)

どうすればよいですか?
投稿日時 - 2002-01-30 17:44:59


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ