String型でのエラー[AB4]

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

String型でのエラー[AB4]

#1 投稿記事 by MML »

今、String型をたくさん扱うソフトを作っています。
(MMLコンパイラみたいなものを)

デバッグのときは強制終了はしないのですが、
リリースコンパイルしたものを実行して、何回かそのしょりをさせると

「問題が発生したので、強制終了、、、、、」
というメッセージが表示されます。
このエラーはどうやれば回避できるのですか?
「ZeroString」というのを使えばできるのでしょうか?

誰かString型に詳しい方、よろしくお願いします。
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

Re: String型でのエラー[AB4]

#2 投稿記事 by MML »

> 今、String型をたくさん扱うソフトを作っています。
> (MMLコンパイラみたいなものを)
>
> デバッグのときは強制終了はしないのですが、
> リリースコンパイルしたものを実行して、何回かそのしょりをさせると
>
> 「問題が発生したので、強制終了、、、、、」
> というメッセージが表示されます。
> このエラーはどうやれば回避できるのですか?
> 「ZeroString」というのを使えばできるのでしょうか?
>
> 誰かString型に詳しい方、よろしくお願いします。
追記です。
MMLコンパイル(みたいなもの)自体は異常ありません。
ほかのソフト(自作言語の中間言語に変えるプログラム)も起こります。
これはStringだからでしょうか、、、?
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#3 投稿記事 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
といった具合に。

ただし、コードは今此処で打った物なので正しいかどうか解りません。十分なデバッグをお願いします。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

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