ab.com コミュニティ
https://www.activebasic.com/forum/

2進数をもとめる関数でのバグ
https://www.activebasic.com/forum/viewtopic.php?t=1520
ページ 11

作成者:  faro [ 2006年9月05日(火) 22:41 ]
記事の件名:  2進数をもとめる関数でのバグ

以前このフォーラムで2進数の関数を表すものがを利用させていただいておりますが,
その関数がVer5CP2では通りません。
コード:
#console
dim temp$ as String

		temp$="0001011010001010100010011"
		temp$=Bin2Dec(temp$)
print temp$

end


'**************************************************
Function Bin2Dec(ByVal data As String) As String

Dim data2 As Qword          
dim c as Dword
dim temp$ as String
dim j as Dword

data2=0
j=0

c=Len(data)

		Do  

			j=j+1
			c=c-1
			temp$=Mid$(data,j,1)

			data2=data2+(1 << c)*Val(temp$)
			
	    Loop Until c=0

Bin2Dec = Str$(data2)
End Function

なぜなのでしょうか?
ご報告させていただきます。

作成者:  ゲスト [ 2006年9月05日(火) 22:52 ]
記事の件名: 

度々ですみません。
訂正があります。

コンパイルは通るのですが,実行がされません。

作成者:  konisi [ 2006年9月06日(水) 00:02 ]
記事の件名: 

どうやら、Mid$から抜ける時、String型の開放のために呼んだHeapFree関数が、C=18の時にエラーを起こしているようです。
ところで、jの値が途中から増えなくなっていますが、String型とメモリの競合でも起こしているのでしょうか?

という事で試してみると
コード:
#console
dim temp$ as String

        temp$="0001011010001010100010011"
        temp$=Bin2Dec(temp$)
print temp$
end


'**************************************************
Function Bin2Dec(ByVal data As String) As String
Dim data2 As Qword          
dim c as Dword
dim temp$ as String
dim j as Dword
dim dum$(9) As String
'もっと色々な数で試してみたが、こちらの環境では初期化0のものが最低で10個必要だった。

data2=0
j=0

c=Len(data)

        Do  
            j=j+1
            c=c-1
            temp$=Mid$(data,j,1)

            data2=data2+(1 << c)*Val(temp$)
            
        Loop Until c=0
Bin2Dec = Str$(data2)
debug'Mid$、Str$でアクセス違反にならなければここまで来るはず
End Function
で、debugの位置まで来たのですが今度は抜ける時にエラーです。Main部分のtemp$の宣言の直後に
コード:
dim dum2$(10000) As String
等と入れてみましたが、やはり関数を抜ける時にエラー。リリースコンパイル時に大丈夫ならいいやと思いF6っと。
それでもうまくいかないのでお手上げです。

ちなみに、リリースコンパイル時のdum2$1万飛んで1個入りの実行ファイルサイズは、900キロ弱(896KB)でした。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/