Avatar billede rolf74 Nybegynder
23. maj 2002 - 09:39 Der er 7 kommentarer og
1 løsning

setlength giver access violation

Hej,

Jeg har et problem. Jeg har lavt en stor dynamisk array af reele tal vhja setlength. Når jeg så bruger setlength igen for at bruge arrayen til nye tal får jeg access violation error.

Jeg har prøvt at lave et simplet eksempel med en lille array hvor det ikke noget problem at bruge setlength flere gange og det er hellere ikke noget problem at genbruge array'en med nye værdier.

Jeg har også prøvt at bruge arraynavn:=copy(arraynavn,0,0); for at slette arrayen inden jeg genbruger den. Dette gør at jeg kan genbruge den et antal gange hvorefter jeg igen får acces violation.

MVH,

Rolf 
Avatar billede borrisholt Novice
23. maj 2002 - 09:44 #1
prøv der her :

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    RealArray : array of Double;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  SetLength(RealArray, 5000);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
  for i := 0 to 4999 do
    RealArray[i] := random(5000) / 5000;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ZeroMemory(RealArray, Sizeof(RealArray));
end;

end.


Jens B
Avatar billede rolf74 Nybegynder
23. maj 2002 - 09:47 #2
Jeg prøver.....
Avatar billede rolf74 Nybegynder
23. maj 2002 - 10:33 #3
Problemet er at jeg skal kunne genbruge arrayen. Hvis jeg indsætter følgende i dit eksempel og trykker en ~10 gange får jeg access violation error (også selv om jeg bruger button2click til at slette arrayen).

procedure TForm1.Button3Click(Sender: TObject);
begin
SetLength(RealArray, 20000);
end;

Rune
Avatar billede borrisholt Novice
23. maj 2002 - 10:38 #4
så brug dynamisk allokering til at lave det, på sammen måde som man gør i C++ og i Delphi 3

jens B
Avatar billede rolf74 Nybegynder
23. maj 2002 - 10:57 #5
Kan du fortælle mig hvor jeg kan læse mere om dynamisk allokering?

Rune
Avatar billede rolf74 Nybegynder
23. maj 2002 - 10:57 #6
Udover delphi hjælpen
Avatar billede rolf74 Nybegynder
23. maj 2002 - 11:04 #7
Jeg forstår heller ikke hvorfor setlength ikke virker ordentligt. Den burde jo i princippet bare værre en simpel udgave af dynamisk allokering eller hvad?
Avatar billede rolf74 Nybegynder
23. maj 2002 - 11:16 #8
Ok, jeg acceptere svaret selvom det ikke løste mit problem.

Mange tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester