gforth で 2 つの文字列を追加しようとしていますが、恐ろしいエラー メッセージが表示されます。
正常にs" foo" s" bar" append type cr
動作しますが、変数に文字列を格納したり、単語から文字列を作成したりするとすぐにエラーが発生します。例えば:
: make-string ( -- s )
s" foo" ;
: append-print ( s s -- )
append type cr ;
make-string s" bar" append-print
実行すると、次のエラーが発生します。
$ gforth prob1.fs -e bye
gforth(41572,0x7fff79cc2310) malloc: *** error for object 0x103a551a0: pointer being realloc'd was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6.
私は C に精通しているので、Forth の使い方が間違っていることは明らかです。Fore でのメモリ管理について、非常に基本的なことを学ぶ必要があると思います。
ここで何が問題なのか、どうすればよいのか、誰か説明してもらえますか?
変数に格納されている文字列を追加しようとすると、問題が発生します。
variable foo
s" foo" foo !
foo s" bar " append type cr
これは、私が壊さなければならないループで終わります:
$ gforth prob2.fs
foo��^C
in file included from *OS command line*:-1
prob2.fs:4: User interrupt
foo s" bar " append >>>type<<< cr
Backtrace:
$10C7C2E90 write-file
参考までに、私は Mac OS X で gforth 0.7.2 を使用しています。
アップデート
の定義を見ることができますappend
:
see append
: append
>l >l >l >l @local0 @local1 @local3 + dup >l resize throw >l @local4 @local0 @local3 + @local5
move @local0 @local1 lp+!# 48 ; ok
では、Forth で自分でメモリを管理する必要があるように見えますか? もしそうなら、どのように?
解決
Andreas Bombe が以下の手がかりを提供します。動作する最終的なプログラムは次のようになります
: make-string ( -- s )
s" foo" ;
: append-print
s+ type cr ;
make-string s" bar" append-print
出力は
$ gforth b.fs -e bye
foobar