2進数をもとめる関数でのバグ

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
faro

2進数をもとめる関数でのバグ

#1 投稿記事 by faro »

以前このフォーラムで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

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

#2 投稿記事 by ゲスト »

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

コンパイルは通るのですが,実行がされません。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#3 投稿記事 by konisi »

どうやら、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)でした。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
返信する