Avatar billede thecokeguy Nybegynder
07. februar 2006 - 00:48 Der er 6 kommentarer og
1 løsning

Invalid Pointer Operation

Hej...

Jeg siddder og rodder med en masse dynamiske arrays og INI-filer... Kan nogen give nogle eksempler på hvorfor fejlen:

"Invalid Pointer Operation"

...dukker op?

På forhånd tak
Avatar billede thecokeguy Nybegynder
07. februar 2006 - 01:07 #1
Jeg poster også lige proceduren, der volder problemer:

procedure GO(vCostumer: TCostumer; vINI: TINIFile);
var
  n, i, j, k: integer;
  LoopLength: integer;
  Places: array of integer;
  NumberCount: array of integer;
  ConfOK: boolean;
  MotorList: array of boolean;
  MotorCount: integer;

  TotalCount: integer;
begin
  n := length(vCostumer.Activities);
  LoopLength := round(power(n, n));
  SetLength(Places, n);
  SetLength(NumberCount, n);
  SetLength(MotorList, n);
  MotorCount := 0;
  TotalCount := 0;

  for i := 0 to n - 1 do
  Places[i] := 0;

  for i := 0 to n - 1 do
  begin
    MotorList[i] := vINI.ReadBool('activity_' + IntToStr(vCostumer.Activities[i]), 'motor', false);
    if MotorList[i] = true then inc(MotorCount);
  end;

  ShowMessage('MotorCount = ' + IntToStr(MotorCount));

  for i := 0 to LoopLength - 1 do
  begin

    for j := 0 to n - 1 do
    NumberCount[j] := 0;

    ConfOK := true;

    for j := 0 to n - 2 do
    if Places[j] = n then
    begin
      Places[j] := 0;
      inc(Places[j + 1]);
    end;

    for j := 0 to n - 1 do
    inc(NumberCount[Places[j]]);

    for j := 0 to n - 1 do
    if NumberCount[j] > 1 then ConfOK := false;

    if MotorCount <> 0 then
    for j := 0 to MotorCount - 1 do
    for k := 0 to n - 1 do
    if Places[k] = j then
    if MotorList[k] = false then ConfOK := false;

    ShowMessage('Place1 = ' + IntToStr(Places[0]) + ' _ ' + 'Place2 = ' + IntToStr(Places[1]));

    if ConfOK = true then inc(TotalCount);

    inc(Places[0]);
  end;

  ShowMessage(IntToStr(TotalCount));

  FreeMem(Places);
  FreeMem(NumberCount);
  FreeMem(MotorList);
end;
Avatar billede tjp Mester
07. februar 2006 - 03:30 #2
Formentlig fordi du prøver at deallokere noget memory med FreeMem som allerede er frigivet. Såvidt jeg ved skal dynamiske arrays ikke deallokeres i Delphi, but correct me if I'm wrong. ;-)

Prøv at fjerne:
  FreeMem(Places);
  FreeMem(NumberCount);
  FreeMem(MotorList);

og se om du sku' løbe tør for hukommelse alligevel! :)
Avatar billede kroning Nybegynder
07. februar 2006 - 08:19 #3
Hvilken linie får du fejlen i?
Avatar billede coladrenge Nybegynder
07. februar 2006 - 16:32 #4
Hej

Det vil måske være nemmere for dig at finde fejlen ved at strukture din kode lidt bedre.

Eksempel på en record som indeholder grund oplysninger om en elev.

HVis du mener nedenstående måske er noget som du kan bruge vil jeg gerne hjælpe dig med at få lavet din kode på samme måde.



  TSearchStudentRecord = record
    CPR : string;
    Fornavn : string;
    Efternavn : string;
    Hold : string;
  end;
  pStudentSearchRecord = ^TSearchStudentRecord;

TElever = Class(Tcomponent)
Private
  Flist : Tlist;
Public
  Constructor Create(Aowner : Tcomponent)

  Procedure AddElev(AelevRecord : pStudentSearchRecord);
  ….

  Function GetAntalAfEtEllerAndet : integer;
End;

Constructor TElever.Create(AOwner : TComponent)
Begin
  Inherited Create(AOwner);
  self.Flist := TList.Create(self);
end;

Procedure TElever.AddElev(AelevRecord : pStudentSearchRecord);
begin
  self.Flist.Add(AElevRecord);
end;

Function Telever.GetAntalAfEtEllerAndet : Integer;
Var
  I : integer;
Begin
  Result := 0;
  For i := 0 to self.Flist.Count – 1 do
    If pSearchStudentRecord(self.Flist[i]).Navn = ’SVEND’ then
      Inc(Result);
End;
Avatar billede thecokeguy Nybegynder
07. februar 2006 - 23:17 #5
tjp... Du havde ret... Poster du lige et svar så du kan få pointene.

Takker
Avatar billede tjp Mester
08. februar 2006 - 00:48 #6
Svar og velbekommme! :)
Avatar billede tjp Mester
20. februar 2006 - 05:14 #7
Lukketid? ;-)
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