Problem pointers

New to FreeBASIC? Post your questions here.
Post Reply
BeginnerST
Posts: 26
Joined: Jun 26, 2016 21:59
Location: Italy

Problem pointers

Post by BeginnerST »

I think I found a bug related to pointers

Code: Select all

#lang "fblite"
Declare Sub nano(addrX As double Pointer ,addrY As Double Pointer ,addrZ As double Pointer )

Dim c(1 To 3+3+3) as Double

Print "X addr ptr c(1)=",@c(1)
Print "Y addr ptr c(4)=",@c(4)
Print "Z addr ptr c(7)=",@c(7)

Print ""

Call nano @c(1),@c(4),@c(7)

Print ""

Dim addr As Double Pointer
For i=1 To 9
	addr=@c(i)
	Select Case i
		Case Is <=3
			Print "verifica X c(i)=",i,addr,*addr,c(i)
		Case Is <=6
			Print "verifica Y c(i)=",i,addr,*addr,c(i)
		Case Is <=9
			Print "verifica Z c(i)=",i,addr,*addr,c(i)
	End Select
Next i
End


Sub nano(addrX As Double Pointer ,addrY As Double Pointer ,addrZ As Double Pointer )

	Dim addr As Double Pointer
	addr=addrX
	
	Dim i As Integer
	For i= 1 To 3
		*addrX=10.
		Print "verifica addrX=10.", i,addrX,*addrX
	  	addrX=addrX+i
	Next i

	For i= 1 To 3
		*addrY=20.
		Print "verifica addrY=20.", i,addrY,*addrY
	  	addrY=addrY+i
	Next i

	For i= 1 To 3
		*addrZ=30.
		Print "verifica addrZ=30.", i,addrZ,*addrZ
	  	addrZ=addrZ+i
	Next i

	Print ""

	For i=1 To 9
		Select Case i
			Case Is <=3
				Print "verifica addrX=10.",i,addr,*addr
			Case Is <=6
				Print "verifica addrY=20.",i,addr,*addr
			Case Is <=9
				Print "verifica addrZ=30.",i,addr,*addr
		End Select
		addr=addr+1
	Next i

End sub
fxm
Moderator
Posts: 12147
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: Problem pointers

Post by fxm »

I think rather to a typo in your code:

Code: Select all

Sub nano(addrX As Double Pointer ,addrY As Double Pointer ,addrZ As Double Pointer )

   Dim addr As Double Pointer
   addr=addrX
   
   Dim i As Integer
   For i= 1 To 3
      *addrX=10.
      Print "verifica addrX=10.", i,addrX,*addrX
'        addrX=addrX+i
        addrX=addrX+1  '' correction
   Next i

   For i= 1 To 3
      *addrY=20.
      Print "verifica addrY=20.", i,addrY,*addrY
'        addrY=addrY+i
        addrY=addrY+1  '' correction
   Next i

   For i= 1 To 3
      *addrZ=30.
      Print "verifica addrZ=30.", i,addrZ,*addrZ
'        addrZ=addrZ+i
        addrZ=addrZ+1  '' correction
   Next i

   Print ""

   For i=1 To 9
      Select Case i
         Case Is <=3
            Print "verifica addrX=10.",i,addr,*addr
         Case Is <=6
            Print "verifica addrY=20.",i,addr,*addr
         Case Is <=9
            Print "verifica addrZ=30.",i,addr,*addr
      End Select
      addr=addr+1
   Next i

End sub
Post Reply