我正在开发一个小项目,我试图模拟CPU声明并为变量赋值,到目前为止一直很好。所以我为我的CPU和内存定义了以下结构。
CPU(只能跟踪3个变量)
typedef struct variableReference{
char *tag;
void *reference;
}variableReference;
typedef struct CPU{
int variableCounter;
int instructionPointer;
variableReference dataDictionary[3];
void *currentContext;
}CPU;
记忆(及其创建功能)。顺便说一句,CPU.currentContext在启动时指向memory.base,然后它就可以改变。
typedef struct Memory{
void *base;
int size;
}Memory;
Memory memory_create(int size){
Memory newMemory;
newMemory.base = malloc(size);
newMemory.size = size;
return newMemory;
}
所以我要做的第一件事是分配一块内存并使用CPU当前上下文指针跟踪它。我已经有一个函数要求cpu声明一个变量(变量只能是整数)和另一个要求cpu为该变量赋值(int)的函数。为此,我在cpu.dataDictionary中跟踪有限数量的变量名称和引用。
变量声明似乎工作正常,但是当我尝试为该变量赋值时会出现问题,我这样做(例如a = 4;):
cpu_assignVariable(&myCPU,"a",4,&myMemory);
那时,在我的cpu.dataDictionary中,我在第一条记录{" a",0x804b008}中有这个,所以我所要做的就是在分配的内存块中查找该位置,并复制值(整数4),如下所示:
void *reference = cpu_dereferenceVariable(*myCPU,tag); // gets a's address
memory_write(reference,1,sizeof(value),(void *) value); // writes the value
现在是memory_write实现,我得到了Segmentation Fault(我的偏移量为1,因为"引用"我以前写过变量名的位置:
int memory_write(void *base, int offset,int size,void *value){
memcpy(base+offset,value,size);
return 0;
}
我希望内存块看起来像这样| a | 0 | 0 | 0 | 4 | x | x | ... | x |,但我得到的只是一个分段错误错误。任何想法???
提前致谢!