• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のアドレスを関数から取得したいのですが)

関数から複数のアドレスを取得する方法

このQ&Aのポイント
  • 関数から複数のアドレスを取得する方法について教えてください。
  • 要件としては、関数から複数のアドレスを取得したいということです。
  • 具体的なイメージとしては、main関数のtest1とtest2にTest関数のdata1とdata2のアドレスが入るようにしたいです。

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

  • ベストアンサー
  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

data1とdata2はTestの中のローカル変数なのでTestが終了するとアドレスは不定になると思います。(ヒープ上にとっていると思うので) それでもかまわないのであれば&in_test1のところを&data1のように書き換えれば渡せるとは思います。 コンパイラによってはWarningが出るかなとも思います。

takuya245
質問者

お礼

すみません。ご指摘どおり例文自体が打ち間違えました。 void main(){   int *test1,*test2;   Test(test1,test2); } void Test(int *in_test1, int *in_test2){   int data1,data2;   data1 = 1;   data2 = 2;   in_test1 = &data1;   in_test2 = &data2; } 本当はクラスでこのようなことをやってはいるのですが、あくまでこれはin_test1とin_test2にアドレスが入り、元のtest1とtest2にはアドレスが入ってこないみたいなのです。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

ローカル変数(data1,data)はスタック上に存在するので、呼び元の関数にアドレスを持ち帰ることは出来ません。正確には持ち帰ることは出来ますが、そのアドレスから参照できる値は保障されませんし、書き換えた場合はプログラムの動作が保障されません。 呼び元で変数を用意するか、mallocで確保したヒープ領域のアドレスを持ち帰る方法を検討してください。 なお、mallocした場合は不要になった時点でかならずfreeしてください。

takuya245
質問者

お礼

ご回答ありがとうございます。 例が悪いので質問をやり直させてください。 申し訳ありません。