掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プリンタの使用可能な用紙名のリストを取得するには? (ID:44853)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> array[0..0]なのに、2個以上の要素を代入して、どうして問題がないのかが、わかりません。 概要は Harryさんが書かれていたと思いますが、ちょっとだけ詳しく。 TPaperNames: array of [0..0] TPaperName; pPaperNames: TPaperNames へのポインタ pPNames: pPaperNames の変数 pPNames のアドレスが A で、 その指している先 (TPaperNames) の初期アドレスが B だとします。 GetMem() すると指定したサイズのメモリが確保され、そのアドレスは C となります。 この時 pPNames の指している (A に格納されている)アドレスも C になります。 B ではなく C をアクセスしているのですから、範囲を超えて読み書きできるという訳です。 ご指摘の通り範囲チェックには引っかかりますけどね。 # 動的配列のないバージョンの Delphi でも使えるテクニックです。 意図して配列の範囲外 (確保したメモリは範囲内) をアクセスするコードなのですから、 「ここは問題ない」と判断して $RANGECHECKS を局所的にオフにするのもアリだと思うのです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.