newを用いた配列作成について

解決


hiropon  2006-09-11 11:04:37  No: 62971

はじめまして。
初めて質問させていただきます。

double (**test)[2]
といったものの配列を作成させる場合、newを用いたらどのように記述すればよいかを教えてください。

ちなみにmallocをもちいたら
test = (double(**)[2])malloc(3*sizeof(double(*)[2]));
とやれば配列は確保できることは確認しています。

現在、この問題についての解決策として
1.構造体にする。
2.この部分のみmallocにて確保する。
といったことがあげられるのですが、できればこの引数のまま使用したいと考えています。

よろしくお願いします。


επιστημη  2006-09-11 17:44:02  No: 62972

typedefするのが一番楽かな、と。

typedef double (*test_type)[2];
test_type* test = new test_type[3];


tetrapod  2006-09-11 22:00:50  No: 62973

ちょっと悩んだ... IS を読み直したです
ISO/IEC 14882:1998 5.3.4 Expression-new の 3 から意訳
Compound type に () が含まれる場合に new がびっくりする結果を返すことがある
new int (*[10])(); は (new int) (*[10]) (); と結合されるのでエラー

というわけで typedef を使いたくないのであればこうなるはず
double (**test)[2]=new (double (*[3])[2]);
# new 要素数が先に出るのがアレげ

当然認識されていると思いますがこれだけでは「配列へのポインタの配列」があるだけ。
ポインタが指す先の配列は無いので注意、っと。


hiropon  2006-09-12 09:49:10  No: 62974

皆様、色々とご親切にありがとうございました。
おかげでうまくnewにて配列作成をすることができました。
これからもC++を邁進していきたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加