[fpc-pascal] Segmentation Error using VideoBuf

Tomas Hajny XHajT03 at hajny.biz
Mon Jul 7 21:44:15 CEST 2014


On 3 Jul 14, at 3:44, Tomas Hajny wrote:
> On Wed, July 2, 2014 14:32, mokashe.ram wrote:


Hi again,

> >              I have done all my work with Free pascal but only one error
> > which still i am not able to fix is MEM as i tried all the options which
> > you
> > suggest me (heartly thanks for that) but still i am not Getting exect
> > solution for it.....
>  .
>  .
> 
> I'm currently on holiday, but I'll have a look at your source after
> getting back home if noone else solves your issue earlier (feel free to
> remind me if you don't get any response if you don't get any response
> within one week from now).

Alright, I've checked it now:

1) As already pointed out by Mark, your source is not compilable 
although you claimed the opposite in your post. First, routines 
Mouse_Enabled, Show_Mouse and Hide_Mouse are neither known by your 
source nor needed in those places because unit Video already takes 
care about the mouse cursor as needed on the particular platform 
used).

2) As also mentioned by Mark, you should provide a test program 
rather than a unit, or you should add a small test program using the 
unit if absolutely necessary (to be honest, I don't understand why 
the compiler refuses to compile it if changing it from a unit to a 
program by removing "interface" and "implementation" keywords and 
moving the "uses" section to the beginning - it complains about 
constructor having to be used only for methods, although exactly the 
same source is compiled happily in a unit???). Anyway, I changed

3) After fixing issues mentioned above, the compiler emits exactly 
one warning when compiling the code. This warning (conversion about 
pointers and ordinals not being portable) helps to locate something 
that could indeed lead to a segmentation error (or at least certainly 
not working as expected). Line  
"current_location^.code:=word(@VideoBuf^[P]);" should be (probably?) 
changed to "current_location^.code:=VideoBuf^[P];" if it aims to read 
character and attributes at the specified screen location. BTW, if I 
understand the intention of the code, it's terribly inefficient, but 
that's another thing.

4) The test part (originally located in the initialization part of 
the unit, but moved to a test program by me) should be changed so 
that it waits for some user interaction before you the final 
DoneVideo call, because this call may destroy whatever you did 
before. You should insert a call to something like ReadLn (waiting 
for Enter) or ReadKey (waiting for any "regular" key) before the 
DoneVideo call to see what the test does. Finally, the parameters of 
Error_Message.Initialise should be probably better changed for a 
bigger window size. If I did that, I could see a rectangle displayed. 
It does not exactly what you expect it to do, but you should be 
probably able to debug the issue from that point (_if_ you understand 
what it does - frankly, I'm not completely convinced about that).

Tomas




More information about the fpc-pascal mailing list