Depending on the compiler *not* to overwrite local variables is most certainly the wrong way to go with this.  You really should create either a global record/object, or use functions to pass around the information you need.  Expecting the operating system to keep local variables after the area goes out of scope is just begging for errors later on when the compiler/os treatment of said areas changes.

On 6/4/2023 1:37 PM, Steve Litt via fpc-pascal wrote:
Henry Vermaak via fpc-pascal said on Fri, 2 Jun 2023 09:38:17 +0100

On Fri, 2 Jun 2023 at 01:36, Steve Litt via fpc-pascal
<fpc-pascal@lists.freepascal.org> wrote:
         fillchar(junkvar, junkvar_size, 'b');
         person := modperson(person, 'Martin');
         person := modperson(person2, 'Maria');
Maybe a typo? (E.g. person2 := modperson(person2, 'Maria'))

Henry
Thanks Henry!

You're right: Changing the second person := to person2 := did just what
I wanted it to do.

Because returning a local array or string as a function return in C
leads to horrible intermittents due to the local going out of scope and
relinquishing the local's stack, which can then be overwritten, I added
a procedure, a function, and a main program statement which each
consumed two million bytes of local variables, and the person and
person2 didn't get overwritten. Very cool.

When I increased the huge local vars to three million bytes, the
program segfaulted. I figure I just ran it out of stack, but until I
did, the huge local vars didn't trash the contents of person and
person2.

Thanks for your help.

SteveT

Steve Litt
Autumn 2022 featured book: Thriving in Tough Times
http://www.troubleshooters.com/bookstore/thrive.htm
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to