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

2013/3/14 Martin <laza...@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@lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to