掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
特大な動的配列の領域確保について (ID:148416)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
自己レスです。 構造体へのポインター、分かりました。 単に、構造体定義後に、ポインターの型名を指定して、構造体型のアドレス演算子として定義する様です。 ただ、状況はもう少し複雑で、構造体メンバも要素数固定の配列を為しています。 例えば、 要素数が固定の配列を形成しています。 type RMTX_Data = Record data1 : LongWord; data2 : Single; data3 : Single; data4 : Byte; End; type RMTX_RGB = Record mtx : Array [ 1 .. 3 ] of RMTX_Data; end; pMTX : ^RMTX_RGB; // 要素配列へのポインターを定義 type RMTX = Record fname : String; ix, jy, kz : Word; // 配列サイズ mtx : Array of Array of Array of RMTX_RGB; // この配列が大き過ぎる場合がある End; の場合、 ptrMTX=^RMTX; を定義すると、 GetMem( ptrMTX, ix * jy * kz * SizeOf()); で、領域は確保される様です。(実行時エラーは出ません) ptrMTX^.MTX[ 1 ].data1 := 0 ; inc( ptrMTX, SizeOf( RMTX_Data )); で、アクセス出来そうです。 ただ、連続的にアクセスする場合にはこれでOKですが、元々3次元の配列で任意の座標へアクセスする必要があります。 ポインターアドレスを配列座標で与える必要がありますが、 ( ptrMTX + 式 )^.MTX[ 1 ].data1 := 0; の様に、ポインターで演算するとコンパイルでエラーとなります。 実は、もっと単純なポインター(ptr : PLongWord;)で、 ptr^ + ( ptr + 1 )^ shl 8 + ( ptr + 2 )^ shl 16 + ( ptr + 3 )^ shl 24; と言う演算ではコンパイル時エラーはなく実行時も問題はありません。 アドレス演算の式は、 (( ptrMTX + kz * k + jy * j + i ) * SizeOf( RMTX_RGB ))^.MTX[ 1 ].data1 の様になるのでは、と考え中です。 ポインターのアドレス演算のところでエラーとなっている原因が分かっていません。 アドバイス頂ければと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.