ページ 11

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
> といった具合に。
>
> ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
ありがとうございます。
よくわかりました。