c – 访问冲突写入位置0xcccccccc
在过去的两天里,我被困在一个违法行为上,我似乎无法逃避.
我已经使用了断点,并且位于错误的地方,但我只是希望你们中的一个会知道什么是没有我必须复制粘贴我所有的代码 – 我越来越
解决方法
未初始化的指针或存储在内存中的指针已被释放.我认为cccccccc是第一个,cdcdcdcd是第二个,但是它与编译器/库实现有所不同.
对于您的特定代码,可能myMap尚未分配,那么myMap [0] [0]将导致对0xcccccccc的访问尝试. 还可能发生myMap是你的类的开始,并且类指针未初始化: class mMap { Tile myMap[10][20]; public: void f() { myMap[0][0] = 0; } }; mMap* what; what->f(); // what is an invalid pointer 这是因为成员函数不是虚拟的,因此编译器知道要运行的代码,并将对象指针作为隐藏参数传递.最终,编译器会发出如下计算: this + offsetof(Whatever::myMap) + z * sizeof(myMap[0]) + i * sizeof(myMap[0][0]) 这是未初始化的,为0xcccccccc.显然,offsetoff部分是零,i和z在你的循环首次都是零,所以你得到0xcccccccc 0 0 0作为内存地址. 要调试这个,使用调用堆栈并找到名为fillMap的函数.然后检查那个函数,其中用于成员访问的指针( – >)来自. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |