Recent

Author Topic: SetLength fall  (Read 637 times)

LemonParty

  • Jr. Member
  • **
  • Posts: 98
SetLength fall
« on: December 04, 2024, 02:58:34 pm »
Can anyone explain why next program falling at line SetLength(B, 10000);?

Fibonacci

  • Hero Member
  • *****
  • Posts: 646
  • Internal Error Hunter
Re: SetLength fall
« Reply #1 on: December 04, 2024, 03:05:29 pm »
Its failing at this line:

Code: Pascal  [Select][+][-]
  1. procedure Go;
  2. var
  3.   Buf: TMnistImg;
  4.   i, j, k: Integer;
  5. begin
  6.   SetLength(A, 60000);
  7.   for k := 1 to 60000 do begin
  8.     for i:= 1 to 28 do
  9.       for j:= 1 to 28 do begin
  10.         if IsNan(Buf[j, i])
  11.           then A[k][i, j]:= 0.0
  12.           else A[k][i, j]:= Buf[j, i] / 255;
  13.       end;
  14.   end;
  15.   SetLength(B, 10000);
  16. end;

Fix:

Code: Pascal  [Select][+][-]
  1.   for k := 0 to high(A) do begin

marcov

  • Administrator
  • Hero Member
  • *
  • Posts: 11987
  • FPC developer.
Re: SetLength fall
« Reply #2 on: December 04, 2024, 03:08:59 pm »
Probably it is accessing A[60000] just before that line.  Debugger sometimes stop on the line after the problem.

Setlength(N)  creates elements from 0 to N-1  not 1 to N

LemonParty

  • Jr. Member
  • **
  • Posts: 98
Re: SetLength fall
« Reply #3 on: December 04, 2024, 03:29:35 pm »
Thank you. I had to watch carefully. I knew about 0-base arrays.

 

TinyPortal © 2005-2018