gpt4 book ai didi

c++ - 访问冲突写入位置 0xcccccccc

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:39 26 4
gpt4 key购买 nike

在过去的 2 天里,我一直被一个我似乎无法摆脱的违规行为所困扰。我已经使用了断点并找到了错误所在,但我只是希望你们中的一个人能知道问题出在哪里,而无需我复制+粘贴我的所有代码-.-

我得到了

First-chance exception at 0x1027cb1a (msvcr100d.dll) in Escape.exe: 0xC0000005: Access violation writing location 0xcccccccc. Unhandled exception at 0x1027cb1a (msvcr100d.dll) in Escape.exe: 0xC0000005: Access violation writing location 0xcccccccc.

现在,快速的谷歌搜索让我觉得发生了一些奇怪的事情。所有的搜索结果都谈论指针实际上并不指向任何地方(0xccccccccc 是一个低内存地址?)。

我还没有在我的代码中使用指针,但无论哪种方式,我都会粘贴该函数并指出抛出异常的行(粗体):

void mMap::fillMap(){
for(int i = 0; i <= 9; i++){
for(int z = 0; z <= 19; z++){
Tile t1; // default Tile Type = "NULLTILE"
myMap[i][z] = t1;
}
}
}

现在 myMap 是一个 Tile 类型的二维数组。几天前我有这个工作,直到我添加了一些其他类并且它都停止工作了!

最佳答案

要么是未初始化的指针,要么是存储在已释放的内存中的指针。我认为 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])

this,未初始化,是 0xcccccccc。显然 offsetof 部分为零,并且 iz 在第一次循环时都为零,所以你得到 0xcccccccc + 0 + 0 + 0 作为内存地址。


要对此进行调试,请使用调用堆栈并找到调用 fillMap 的函数。然后检查用于成员访问的指针 (->) 来自的函数。

关于c++ - 访问冲突写入位置 0xcccccccc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39350258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com