ポインタを使った2次元配列のコピー 

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
コハク
記事: 8
登録日時: 9年前

ポインタを使った2次元配列のコピー 

#1

投稿記事 by コハク » 9年前

コード:

void Merge(double **parents,int size,int size_2){
  double **new_gene=new double*[size];
  for(int i=0;i<size;i++){
      *(new_gene+i)=new double[size_2];
  }

//new_geneの要素を並び替える操作
//コピー
  parents=new_gene;

}

int main(){
  double **p=new double*[10];
  for(int i=0;i<10;i++){
    *(p+i)=new double[2];
  }
  Merge(p,10,2);
 for(int i=0;i<10;i++){
    for(int j=0;j<2;j++){
      cout<<(*(p+i))[j]<<endl;
    }
  }
  return 0;
}
この出力が関数の中で入れ替えた後の配列にならず困っています。
関数の戻り値として取得する方法以外でpにnew_geneの値を挿入することはできないでしょうか。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ポインタを使った2次元配列のコピー 

#2

投稿記事 by みけCAT » 9年前

コハク さんが書きました:関数の戻り値として取得する方法以外でpにnew_geneの値を挿入することはできないでしょうか。
挿入するというのはよくわからないですが、上書きならばポインタや

コード:

void Merge(double ***parents,int size,int size_2){
  double **new_gene=new double*[size];
  for(int i=0;i<size;i++){
      *(new_gene+i)=new double[size_2];
  }

//new_geneの要素を並び替える操作
//コピー
  for(int i=0;i<size;i++){
    delete[] (*parents)[i];
  }
  delete[] *parents;
  *parents=new_gene;

}

int main(){
  double **p=new double*[10];
  for(int i=0;i<10;i++){
    *(p+i)=new double[2];
  }
  Merge(&p,10,2);
  for(int i=0;i<10;i++){
    for(int j=0;j<2;j++){
      cout<<(*(p+i))[j]<<endl;
    }
  }
  for(int i=0;i<10;i++){
    delete[] *(p+i);
  }
  delete[] p;
  return 0;
}
参照を使ってできます。

コード:

void Merge(double **&parents,int size,int size_2){
  double **new_gene=new double*[size];
  for(int i=0;i<size;i++){
      *(new_gene+i)=new double[size_2];
  }

//new_geneの要素を並び替える操作
//コピー
  for(int i=0;i<size;i++){
    delete[] parents[i];
  }
  delete[] parents;
  parents=new_gene;

}

int main(){
  double **p=new double*[10];
  for(int i=0;i<10;i++){
    *(p+i)=new double[2];
  }
  Merge(p,10,2);
  for(int i=0;i<10;i++){
    for(int j=0;j<2;j++){
      cout<<(*(p+i))[j]<<endl;
    }
  }
  for(int i=0;i<10;i++){
    delete[] *(p+i);
  }
  delete[] p;
  return 0;
}
メモリリークを起こさないように、コードに余計な全角文字が混ざらないように注意してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
コハク
記事: 8
登録日時: 9年前

Re: ポインタを使った2次元配列のコピー 

#3

投稿記事 by コハク » 9年前

ありがとうございます!
参照のほうのやり方で解決できました!
**&(変数名)という風な書き方は知らなかったのでとても勉強になりました.

ポインタのほうは
ポインタはデリートできません
*parents とnew_geneは異なる型です
と出てきたため使うことを断念しました.

閉鎖

“C言語何でも質問掲示板” へ戻る