[fpc-pascal] catch segfaults

Xiangrong Fang xrfang at gmail.com
Thu Mar 14 16:10:42 CET 2013


Thanks for the explanation.  Now I see why my program some time crashed at
gtk2*.inc...

2013/3/14 Martin <lazarus at mfriebe.de>

>  On 14/03/2013 09:47, Jonas Maebe wrote:
>
>
>  On 14 Mar 2013, at 01:48, Xiangrong Fang wrote:
>
> The document said it is "deprecated"? Also, I want this to be cross
> platform, not for unix only.  The use case is:
>
> try
>  buf := GetMemory(1024);
>  size := 10240;
>  stream.Read(buf^, size);
> except
>  ??
> end;
>
>
> That use case is a textbook example of why you should never try to catch
> and handle access violations, except possibly if you then warn the user
> that anything could happen if he continues (including erasing all files on
> his hard drive, if he's very unlucky).
>
>  An access violation often indicates that memory has been corrupted.
> Catching the access violation does not undo the memory corruption, it just
> informs you about this fact. If you continue after catching the exception
> in the above program, you will be working with corrupted memory, which
> means that the behaviour of your program becomes completely unpredictable
> afterwards.
>
>  @Xiangrong
>
> In fact (after I saw the screenshot, that indeed the alloc mem is less
> than the read), there is a possibility that the above good does NOT even
> crash. Yet it corrupts memory and the app will crash at a random later
> point.
>
> If the 1024 bytes happen to be allocated in such way that they are
> followed by other already alocated memory, then they can be accessed
> without SigSegV.
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20130314/eb947d38/attachment.html>


More information about the fpc-pascal mailing list