いつもお世話になります。
WindowsXP+D2007です。
メインフォームから起動時に動的に生成したクラス配列にデータを渡し処理させようとしているのですが、メモリエラーが出て困っております。
データはdoubleで、1秒間隔でクラスにデータを渡しています。
1,データを渡すたびに、setlengthでクラス内の動的配列の要素数を1増やして データを書き込んでいるのですが、10数回でFASTMMがエラー検出して止まっ てしまいます。
2,Windowsのタスクマネージャーでは特にメモリの使用量は変化していません。
3,FASTMMを外すと特にシステムエラーとしては何もありません。
4,頻繁に要素数を追加するような処理は、setlengthではダメなのでしょう か?
宜しくお願い致します。
単純に範囲外アクセスしてるだけだろう。
とりあえずコンパイルオプションで範囲チェックしてみればいい。
そもそもちゃんと答えて欲しいなら「エラー出た」なんてプログラマにあるまじきバカみたいな書き方するんじゃなくて、
具体的にどういうエラーが出たのかだとか、実際にエラーがコードを晒すとかするべきじゃないか?
Seventh Delphiさんの下記アドレス参照
動的配列の添え字は常に0から始まる
http://kakinotane.s7.xrea.com/delphi/d2/d027.html
var
iArr: array of Integer; // 動的配列の宣言
begin
SetLength(iArr, 10); // 要素数10に設定
iArr[10]:=10; //ここがエラーの原因
//iArr[9]までしか使用できない。
それは 様 早速のご指摘有り難うございます。
全く馬鹿げた質問でした。仰るとおり、単純な範囲外アクセスでした。
TS 様丁寧に有り難うございます。
FASTMMを外すと何事もなかったように、動いてしまっていたのでまさか範囲外アクセスやってるとは思いもよりませんでした。
お恥ずかしい限りです。
ツイート | ![]() |