基本上我正在尝试使用gnu-prolog来模拟C指针解除引用。
以下是代码:
的Prolog
:-foreign(fun(+integer,-integer)).
% p = &b;
testfun(Var, Val) :- fun(Val, Var).
main :-
A is 1,
testfun(A, P),
write(P),
C:
#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中获取变量的内存地址(例如,在这种情况下,它是A的地址,而不是ptr的地址)?
答案 0 :(得分:1)
Gnu Prolog很容易通过writing C routines and linking扩展到可执行文件中。但如果你试图“模拟内存引用关系”,那么我怀疑黑客入侵实际的内存地址函数是否有用。
相反,正如@lurker建议的那样,你可能想要“模拟”一个内存/计算机架构,然后是一些“执行”的C语言。这听起来有点雄心勃勃,但simulation of a CPU in Prolog已经被问到了,而more recently here被你问过,潜伏在“潜伏者”中。