基本的に、gnu-prolog を使用して C ポインターの逆参照をシミュレートしようとしています。
コードは次のとおりです。
プロローグ
:-foreign(fun(+integer,-integer)).
% p = &b;
testfun(Var, Val) :- fun(Val, Var).
main :-
A is 1,
testfun(A, P),
write(P),
子:
#include <gprolog.h>
#include <string.h>
PlBool fun(int ptr, int* res){
*res = &ptr; // this is wrong
if(res==NULL){
return PL_FALSE;
}else{
return PL_TRUE;
}
}
ptr はスタック上の単なる一時変数であり、そのメモリは fun の呼び出し後に解放されるため、基本的には間違っています。
私の質問は、gnu prolog で変数のメモリ アドレスを取得することは可能ですか (たとえば、この場合、ptr のアドレスではなく、A のアドレスです)。