首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

访问违规的有关问题

2012-05-11 
访问违规的问题我的程序简化以后大致是这个样子的:C/C++ codeclass Memory {private:int mem[1024]public

访问违规的问题
我的程序简化以后大致是这个样子的:

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;}
[解决办法]
探讨

哦,我改写的时候错了。程序能通过编译,构造函数没有void.

热点排行