gforth에서 두 개의 문자열을 추가하려고하는데 무서운 오류 메시지가 표시됩니다.단어 또는 변수의 문자열을 추가 할 때 오류가 발생했습니다.
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
는 다음과 같은 오류 생산 실행 : 내가 아니라 C에 정통하고있어
$ 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.
를, 그래서 내가 넷째 잘못 사용하고 꽤 분명한 것 같다! Forth에서 메모리 관리에 관해 아주 기본적인 것을 배워야한다고 가정합니다.
아무도 설명이 잘못되었다고 설명 할 수 있습니까? 은이되어야합니까?
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에서 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
를, 내가 로한 메모리 나 자신을 관리하는 데 필요한 것 같다? 그렇다면 어떻게?
솔루션
안드레아스 봄베는 아래의 단서를 제공한다. 작동 마지막 프로그램은
: make-string (-- s)
s" foo" ;
: append-print
s+ type cr ;
make-string s" bar" append-print
출력이
$ gforth b.fs -e bye
foobar
큰 설명 주셔서 감사합니다. 그러나 위 예제를 어떻게 작성할 수 있을지에 대한 제안이 있습니까? 먼저 문자열을 생성하기 위해서'CREATE'를 사용해야합니까? (내가 원한다면 기꺼이 해답을 받아 들일 수 있습니다. 어쨌든 받아들이겠습니다.하지만 사이트에 좋을 것입니다.) – csl
@csl 뭔가를 발견하고 내 대답을 편집했습니다. . –