C中memcpy的分段错误

时间:2014-04-28 13:32:11

标签: c memory segmentation-fault

我正在开发一个小项目,我试图模拟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 |,但我得到的只是一个分段错误错误。任何想法???

提前致谢!

0 个答案:

没有答案