掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
動的配列で例外・・?なぜ? (ID:15968)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ちょっと長いのですが、ご教授頂けたら幸いです。 type PTInfo = ^TInfo TInfo = record Num: Integer; Dat: TMemoryStream; end; type TInfoAry = array of TInfo; メンバ変数で FInfoAry :TInfoAry; として動的配列を利用しています。 配列を増やすときは、SetLengthを使っています。 仮に、この動的配列が100個できたとします。 (FInfoAry[0]〜FInfoAry[99]) それぞれのNumには0〜99の整数値が入っています。 MemoryStreamも、配列を増やした後、生成し、 Datには何らかのデータが入っているとします。 ちなみに、実行してデータを格納し、アプリケーションを終了しても、正常終了するので メモリリークはないようです。(MemCheck.pasというのを利用しています) ここまでうまくできたようなので、それぞれのデータNum、Datを、ファイルに出力 しようと思い、NumはTStringListのSaveToFile、DatはTMemoryStreamのSaveToFile を利用し、ファイルに出力してみました。 for文で配列[0]から順に出力しているのですが、[6]番目を出力しようとすると例外(access violation)が発生します。 GetLastErrorでエラーを見ると、「この操作を正しく終了しました」と言われています。 以下のコメントの所(TMemoryStream)のデバッグをするときは、TStringListの方をコメントにしています。 どちらでも同じ例外が発生します。 try nLen := Length(FInfoAry); for i:=0 to nLen-1 do begin sList := TStringList.Create; sFname := 'out_num' + IntToStr(i) + '.txt'; sList.Add('NUM : ' + IntToStr(FInfoAry[i].Num)); sList.SaveToFile('C:\test\' + sFname); sList.Free; end; // for i:=0 to nLen-1 do begin // sFname := 'out_dat' + IntToStr(i) + '.txt'; // FInfoAry[i].Dat.SaveToFile('C:\test\' + sFname); // end; except GetLastErrorStr(GetLastError); end; データが正常に格納されていないのかと思い、[0]からではなく[5]番目あたりから出力してみたのですが、 [5]〜[11]までは正常に出力するのですが、[12]番目を出力しようとすると上記と同じような例外が発生します。 データは正常に格納されているように見えるので、何がいけないのかサッパリわかりません。 SetLengthの使い方がマズイのでしょうか? FIdx:Integer FIdx := 0; ---------------------- SetLength(FInfoAry, FIdx+1); FInfoAry[FIdx].Dat := TMemoryStream.Create; Inc(FIdx); という感じで使っているのですが・・。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.