今、String型をたくさん扱うソフトを作っています。
(MMLコンパイラみたいなものを)
デバッグのときは強制終了はしないのですが、
リリースコンパイルしたものを実行して、何回かそのしょりをさせると
「問題が発生したので、強制終了、、、、、」
というメッセージが表示されます。
このエラーはどうやれば回避できるのですか?
「ZeroString」というのを使えばできるのでしょうか?
誰かString型に詳しい方、よろしくお願いします。
String型でのエラー[AB4]
Re: String型でのエラー[AB4]
> 今、String型をたくさん扱うソフトを作っています。
> (MMLコンパイラみたいなものを)
>
> デバッグのときは強制終了はしないのですが、
> リリースコンパイルしたものを実行して、何回かそのしょりをさせると
>
> 「問題が発生したので、強制終了、、、、、」
> というメッセージが表示されます。
> このエラーはどうやれば回避できるのですか?
> 「ZeroString」というのを使えばできるのでしょうか?
>
> 誰かString型に詳しい方、よろしくお願いします。
追記です。
MMLコンパイル(みたいなもの)自体は異常ありません。
ほかのソフト(自作言語の中間言語に変えるプログラム)も起こります。
これはStringだからでしょうか、、、?
> (MMLコンパイラみたいなものを)
>
> デバッグのときは強制終了はしないのですが、
> リリースコンパイルしたものを実行して、何回かそのしょりをさせると
>
> 「問題が発生したので、強制終了、、、、、」
> というメッセージが表示されます。
> このエラーはどうやれば回避できるのですか?
> 「ZeroString」というのを使えばできるのでしょうか?
>
> 誰かString型に詳しい方、よろしくお願いします。
追記です。
MMLコンパイル(みたいなもの)自体は異常ありません。
ほかのソフト(自作言語の中間言語に変えるプログラム)も起こります。
これはStringだからでしょうか、、、?
String型は、一度に大量に(100個とか)使おうとすると、なぜかうまく行きにくくなります。
その為、僕はByteptr型の配列を使って対応しています。
といった具合に。
ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
その為、僕は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
ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
> String型は、一度に大量に(100個とか)使おうとすると、なぜかうまく行きにくくなります。
> その為、僕はByteptr型の配列を使って対応しています。
>
>
> といった具合に。
>
> ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
ありがとうございます。
よくわかりました。
> その為、僕は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
>
> ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
ありがとうございます。
よくわかりました。