ページ 1 / 1
String型でのエラー[AB4]
Posted: 2006年10月05日(木) 17:15
by MML
今、String型をたくさん扱うソフトを作っています。
(MMLコンパイラみたいなものを)
デバッグのときは強制終了はしないのですが、
リリースコンパイルしたものを実行して、何回かそのしょりをさせると
「問題が発生したので、強制終了、、、、、」
というメッセージが表示されます。
このエラーはどうやれば回避できるのですか?
「ZeroString」というのを使えばできるのでしょうか?
誰かString型に詳しい方、よろしくお願いします。
Re: String型でのエラー[AB4]
Posted: 2006年10月05日(木) 18:46
by MML
> 今、String型をたくさん扱うソフトを作っています。
> (MMLコンパイラみたいなものを)
>
> デバッグのときは強制終了はしないのですが、
> リリースコンパイルしたものを実行して、何回かそのしょりをさせると
>
> 「問題が発生したので、強制終了、、、、、」
> というメッセージが表示されます。
> このエラーはどうやれば回避できるのですか?
> 「ZeroString」というのを使えばできるのでしょうか?
>
> 誰かString型に詳しい方、よろしくお願いします。
追記です。
MMLコンパイル(みたいなもの)自体は異常ありません。
ほかのソフト(自作言語の中間言語に変えるプログラム)も起こります。
これはStringだからでしょうか、、、?
Posted: 2006年10月05日(木) 19:44
by konisi
String型は、一度に大量に(100個とか)使おうとすると、なぜかうまく行きにくくなります。
その為、僕はByteptr型の配列を使って対応しています。
コード: 全て選択
Dim A$ As String,B(1000) As BytePtr
Dim i As Long
'略
Get #1,,A$
Cpy(B(i),A$)
'略
Ret(A$,B(i))
Put #2,,A$
'略
Sub Cpy(ByRef Dest As BytePtr,Src As String)
If Dest<>0 then free(Dest)
Dest=calloc(Len(Src)+1)
memcpy(Dest,StrPtr(Src),Len(Src))
End Sub
Sub Ret(ByRef Dest As String,Src As BytePtr)
If Src=0 then Exit Sub
Dest=MakeStr(Src)
End Sub
といった具合に。
ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
Posted: 2006年10月06日(金) 10:09
by MML
> String型は、一度に大量に(100個とか)使おうとすると、なぜかうまく行きにくくなります。
> その為、僕はByteptr型の配列を使って対応しています。
>
>
コード: 全て選択
Dim A$ As String,B(1000) As BytePtr
> Dim i As Long
>
> '略
>
> Get #1,,A$
> Cpy(B(i),A$)
>
> '略
>
> Ret(A$,B(i))
> Put #2,,A$
>
> '略
>
> Sub Cpy(ByRef Dest As BytePtr,Src As String)
> If Dest<>0 then free(Dest)
> Dest=calloc(Len(Src)+1)
> memcpy(Dest,StrPtr(Src),Len(Src))
> End Sub
>
> Sub Ret(ByRef Dest As String,Src As BytePtr)
> If Src=0 then Exit Sub
> Dest=MakeStr(Src)
> End Sub
> といった具合に。
>
> ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
ありがとうございます。
よくわかりました。