基本上,我正在尝试使用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只是堆栈上的一个临时变量,它的内存将在调用乐趣之后被释放。
所以我的问题是,是否可以在gnu prolog中获得变量的内存地址(例如,在这种情况下,它是A的地址,而不是ptr的地址)?
发布于 2014-04-13 16:18:41
Gnu很容易被编写C例程和链接扩展成一个可执行文件。但是,如果您试图“模拟内存引用关系”,那么我怀疑对实际内存地址函数进行黑客攻击是否有用。
相反,正如@潜伏者所暗示的,您可能希望“模拟”一个内存/计算机体系结构,然后是一些类似C的语言,在其上“执行”。这听起来有点野心勃勃,但是Prolog中CPU的仿真已经被问到了,最近在这里也被问到了,还有潜伏者的回答。
https://stackoverflow.com/questions/23038033
复制相似问题