掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
特大な動的配列の領域確保について (ID:148415)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
明けましておめでとうございます。 早速ですが、 構造体をメンバーに持つ多次元(3次元)動的配列を使っています。配列要素数が概ね[100以下,100以下,200以下]の時は問題はなかったのですが、要素数が[200以上,200以上,300以上]の時に、SetLengthを実行したところで”例外クラスEOutOfMemory(メモリーが足りません)”が発生します。 別の領域確保方法はないでしょうか? GetMemoryやVirtualAlloc等を検討しています。 GetMemoryやVirtualAllocの場合、ポインターとしての領域確保になると思います。 領域場所として構造体へのポインターを指定する場合、どの様に指定すれば良いでしょうか? 構造体名を"MTX_Dat"とした場合、 SetLength可能な場合は、 SetLength( MTX_Dat, x, y, z ); としていました。 但し、 MTX : RMTX_Dat; で、 RMTX_Data : Array of Array of Array of RMTX_Dat; です。 一方で、GetMemの場合、 GetMem( pMTX, x * y * z * Sizeof( RMTX_Data )); とするのだと思います。 ここで、 RMTX_Dat型へのポインター"pMTX"の定義が分かりません。 通常、Word型へのポインターは”PWord”、Single型へのポインターは”PSingle”として定義すると思います。 今回、RMTX_Dat型へのポインターを”PMTX_Dat”としてみましたが、(当然ですが)自動的に”PMTX_Dat”が作成される分けでありませんでした。 また、RMTX_Dat型へのポインターをpMTXで領域確保できたとして、その要素へのアクセスは、”pMTX^.メンバ名”でアクセス出来ると言う事で良いでしょうか? RMTX_Dat型へのポインター変数の定義で詰まっています。 なお、SetLengthで確保可能な配列要素数の上限はいくつでしょうか?要素数でSetLengthで配列でアクセス、GetMemでポインターでアクセスを切り分けられればと思います。 当方、32bit Windows 10 Pro+DELPHI XE6 です。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.