掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Pointer型の配列の使い方 (ID:32302)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いまの場合、ポインタの配列と、その配列の先頭をあらわすポインタ変数を 混乱しているようです。ポインタ以外の配列でも、たとえば type PVariableArray = ^TVariable; TVariable = array of Variable; とした場合、 var Data :PVariableArray; の場合、Data は Variable の配列の先頭を表すポインタです。 >1.についてですが、例外が出ているわけではなくて、 はい、最初の回答にも例外が出てるとは書いてません。 >「MS.Size - 1」の値を小さくすると(MS.Size - 2)、復号はされません。 それは何かの勘違いでは? 最後の1バイトだけ復号されないのは当然ですが。 >また「MS.Size - 1」の値を大きくしても(MS.Size + 5) for文が実行され復号されます。★1 それはそうでしょう。TMemoryStream の内部で確保しているメモリの量は 一般に Size より大きいのでたまたま アクセスバイオレーション が 出なかっただけで、Size を越えてアクセスしてはいけません。 わたしだったら、 var MS: TMemoryStream; Data: PByte; <===== 注目! --------------------------------- MS := TMemoryStream.Create; try MS.LoadFromFile('test.dat'); Data := MS.Memory; // この代入により Data は MS が持ってるメモリの先頭を指す for i := 0 to MS.Size - 1 do begin Data^ := not Data^; Inc(Data); end; MS.SaveToFile('test_fukugen.dat'); --------------------------------- ように書きます。 (すみませんが今はDelphiの環境に触れないので確認はしてません)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.