0

基本上我正在尝试使用 gnu-prolog 模拟 C 指针取消引用。

这是代码:

序言

:-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 的地址)?

4

1 回答 1

2

通过编写 C 例程并将它们链接到可执行文件中,Gnu Prolog 很容易扩展。但是如果您试图“模拟内存引用关系”,那么我怀疑在实际内存地址函数中进行黑客攻击是否有用。

相反,正如@lurker 所建议的那样,您可能想要“模拟”内存/计算机架构,然后是一些类似 C 的语言在其上“执行”。这听起来有点雄心勃勃,但是已经有人问过在 Prolog 中模拟 CPU 的问题,最近你在这里问过这个问题,还有 lurker 的回答。

于 2014-04-13T16:18:41.683 回答