setlengthでメモリーエラー

解決


老かも  2010-03-28 06:13:10  No: 38127

いつもお世話になります。
WindowsXP+D2007です。

メインフォームから起動時に動的に生成したクラス配列にデータを渡し処理させようとしているのですが、メモリエラーが出て困っております。
データはdoubleで、1秒間隔でクラスにデータを渡しています。
1,データを渡すたびに、setlengthでクラス内の動的配列の要素数を1増やして  データを書き込んでいるのですが、10数回でFASTMMがエラー検出して止まっ  てしまいます。
2,Windowsのタスクマネージャーでは特にメモリの使用量は変化していません。
3,FASTMMを外すと特にシステムエラーとしては何もありません。
4,頻繁に要素数を追加するような処理は、setlengthではダメなのでしょう    か?
  
宜しくお願い致します。


それは  2010-03-28 08:24:03  No: 38128

単純に範囲外アクセスしてるだけだろう。
とりあえずコンパイルオプションで範囲チェックしてみればいい。
そもそもちゃんと答えて欲しいなら「エラー出た」なんてプログラマにあるまじきバカみたいな書き方するんじゃなくて、
具体的にどういうエラーが出たのかだとか、実際にエラーがコードを晒すとかするべきじゃないか?


TS  2010-03-28 19:22:42  No: 38129

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]までしか使用できない。


老かも  2010-03-29 01:26:09  No: 38130

それは 様  早速のご指摘有り難うございます。
全く馬鹿げた質問でした。仰るとおり、単純な範囲外アクセスでした。

TS 様丁寧に有り難うございます。
FASTMMを外すと何事もなかったように、動いてしまっていたのでまさか範囲外アクセスやってるとは思いもよりませんでした。
お恥ずかしい限りです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加