Jussi i can post here the cases of pointer's mis-usage from my book and you can add any of them in your project freely.
1) Assign new address to an existing pointer drives to memory leak. The first address cannot be freed directly. ' Gambas module file Public Sub Main() Dim pPointer1 As Pointer Dim pPointer2 As Pointer pPointer1 = Alloc(4) pPointer2 = Alloc(4) Print "Address of pPointer1"; pPointer1 Print "Address of pPointer2"; pPointer2 pPointer2 = pPointer1 Print "Address of pPointer1"; pPointer1 Print "Address of pPointer2"; pPointer2 Free(pPointer1) Free(pPointer2) End 2) Not freeing a pointer. ' Gambas module file Public Sub Main() UsePointer() End Public Sub UsePointer() Dim pPointer1 As Pointer pPointer1 = Alloc(4) Print "Address of pPointer1"; pPointer1 End 3) Write to a pointer greater length of data, buffer overflow ' Gambas module file Public Sub Main() Dim pPointer As Pointer Dim hMemory As Stream pPointer = Alloc(4) hMemory = Memory pPointer For Read Write Write #hMemory, CByte(0) As Byte Write #hMemory, CByte(1) As Byte Write #hMemory, CByte(0) As Byte Write #hMemory, CByte(1) As Byte Write #hMemory, CByte(0) As Byte Close #hMemory Free(pPointer) End 4) usage o pointer which has been freed ' Gambas module file Public Sub Main() Dim pPointer As Pointer Dim hMemory As Stream pPointer = Alloc(4) hMemory = Memory pPointer For Read Write Write #hMemory, CByte(0) As Byte Write #hMemory, CByte(1) As Byte Write #hMemory, CByte(0) As Byte Write #hMemory, CByte(1) As Byte Close #hMemory Print Byte@(pPointer) Free(pPointer) Print Byte@(pPointer) End 5) Free an already free pointer ' Gambas module file Public Sub Main() Dim pPointer As Pointer pPointer = Alloc(4) Free(pPointer) Free(pPointer) End 6) Free unallocated pointer. ' Gambas module file Public Sub Main() Dim pPointer As Pointer pPointer = Alloc(4) Print pPointer pPointer += 10 Print pPointer 'Free(pPointer) End 7) Write to a pointer which has been freed. ' Gambas module file Public Sub Main() Dim pPointer As Pointer Dim hMemory As Stream pPointer = Alloc(SizeOf(gb.Integer)) hMemory = Memory pPointer For Read Write Print pPointer Free(pPointer) Write #hMemory, 10 As Integer Print pPointer Print Int@(pPointer) Print pPointer End 8) Write to unallocated memory ' Gambas module file Public Sub Main() Dim pPointer As Pointer Dim hMemory As Stream pPointer = Alloc(SizeOf(gb.Integer)) hMemory = Memory pPointer For Read Write Print pPointer pPointer += 10 Print pPointer Write #hMemory, 10 As Integer Free(pPointer) End --------- Suggested usage of pointers ' Gambas module file Public Sub Main() Dim pPointer As Pointer Dim hMemory As Stream pPointer = Alloc(4) Print pPointer hMemory = Memory pPointer For Read Write Write #hMemory, CByte(0) As Byte Write #hMemory, CByte(1) As Byte Write #hMemory, CByte(0) As Byte Write #hMemory, CByte(1) As Byte Close #hMemory Free(pPointer) pPointer = 0 Print pPointer Print Byte@(pPointer) 'expected error End On Fri, 2011-01-14 at 19:23 +0200, Jussi Lahtinen wrote: > True, and that is my only usage for them, > except GambasTester which is supposed to test every command > for possible errors. > > Jussi > > > On Fri, Jan 14, 2011 at 05:29, Ian Haywood <[email protected]> wrote: > > > On Fri, Jan 14, 2011 at 8:41 AM, Demosthenes Koptsis > > <[email protected]> wrote: > > > :) Pointers are tricky! > > yes, the ability to avoid pointers is one of the main advantages of > > higher-level languages like Gambas. > > I'm curious to know why you guys are so fascinated by them, other than > > interfacing with C libraries I would have thought they should be left > > well alone. > > > > Ian > > > > > > ------------------------------------------------------------------------------ > > Protect Your Site and Customers from Malware Attacks > > Learn about various malware tactics and how to avoid them. Understand > > malware threats, the impact they can have on your business, and how you > > can protect your company and customers by using code signing. > > http://p.sf.net/sfu/oracle-sfdevnl > > _______________________________________________ > > Gambas-user mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/gambas-user > > > ------------------------------------------------------------------------------ > Protect Your Site and Customers from Malware Attacks > Learn about various malware tactics and how to avoid them. Understand > malware threats, the impact they can have on your business, and how you > can protect your company and customers by using code signing. > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > Gambas-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/gambas-user -- Regards, Demosthenes Koptsis. ------------------------------------------------------------------------------ Protect Your Site and Customers from Malware Attacks Learn about various malware tactics and how to avoid them. Understand malware threats, the impact they can have on your business, and how you can protect your company and customers by using code signing. http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ Gambas-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/gambas-user
