访问违规的问题
我的程序简化以后大致是这个样子的:
- C/C++ code
class Memory {private: int mem[1024];public: void Memory(void) { memset(mem, 0, sizeof(int) * 1024; } int read(int addr) { // 发生错误的位置 return mem[addr]; }}class CPU {private: int data; Memory *memorypublic: void CPU(Memory *mem) { memory = mem; } void fetch(int addr) { data = memory->read(addr); } void loop(void) { fetch(300); }}int main() { Memory *theMemory = new Memory; CPU *theCPU = new CPU(theMemory); theCPU->loop(); return 0;}每次运行到上面标注的地方就发生访问违规错误:
Unhandled exception at 0x010f39fa in Test.exe: 0xC0000005: Access violation reading location 0xcdd44dcd.
我单步调试了程序,在Memory的构造函数里,mem这个数组的确被清零了。但是运行到CPU类里的时候,监视窗口里的mem变成了灰色,表明已经离开变量的作用域。等到fetch()函数再次进入Memory类的read()函数的时候,监视窗口显示mem数组里全都是???,就是没有初始化的样子。之后就发生访问违规错误了。
有谁知道这是怎么回事吗?非常感谢!
[解决办法]
void Memory(void)
void CPU(Memory *mem)
是构造函数吧, 不该有返回值的,
这样应该不能编译通过吧。
[解决办法]
你这构造函数怎么还有void呢。
[解决办法]
构造函数格式错了.
- C/C++ code
class Memory {private: int mem[1024];public: Memory() { memset(mem, 0, sizeof(int) * 1024); } int read(int addr) { // 发生错误的位置 return mem[addr]; }}class CPU {private: int data; Memory *memorypublic: CPU(Memory *mem) { memory = mem; } void fetch(int addr) { data = memory->read(addr); } void loop(void) { fetch(300); }}int main() { Memory *theMemory = new Memory; CPU *theCPU = new CPU(theMemory); theCPU->loop(); return 0;}
[解决办法]