掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プリンタの使用可能な用紙名のリストを取得するには? (ID:44854)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ではまだ指摘されてない部分を言ってみます。 >array[0..0]なのに、2個以上の要素を代入して、どうして問題がないのかが、わかりません。 いやいや、実行時にここできちんとメモリの確保が行われているから大丈夫なんです。 GetMem(pPNames,Count*SizeOf(TPaperName)); GetMem(pPNumber,Count*SizeOf(TPaperNumber)); これが実行されることにより、実質的に array[0..Count-1] となりますので。 Countがいくつになるかは実行時にしか分からないので、それに対応するためですね。 かんとくさんに納得してもらえるよう、説得(脅迫?)を試みます。(以下、私なりの解釈です。) ・ Delphiは腐ってもネイティブコンパイラです。それは、”性能第一”を目指すものだと思うのです。 ・ 何が言いたいのかというと、「メモリの確保や配列の添字を範囲内に収めることは、プログラマが責任を持って やってください」というのが大前提なんじゃないかと。 ・ じゃーなぜ「範囲チェック」があるの? → いえ、デフォルトではOFFだと思いますし、Borlandもこう言ってました。 >範囲チェックを有効にすると,プログラムの速度が低下しサイズも大きくなります。 >したがって,{$R+} はデバッグ用にのみ使用してください。 ※↑Delphi6 Personal ヘルプの、「RANGECHECKS (範囲チェック)」の項目より抜粋 ・それでも [0..0] は納得できません! → 困りましたねー。実はVCLのソースの中には、山盛りたくさんの [0..0] が 含まれているのですが…。それでも嫌と言い続けますか? 一度試しに、Delphiのインストールディレクトリの中を [0..0] でファイル検索してみてください。 #演出の都合上、勝手にかんとくさんのキャラ付けをさせていただきました。失礼しました。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.