访问冲突写入位置0xcccccccc
Access violation writing location 0xcccccccc
在过去的两天里,我一直被困在我似乎无法摆脱的违规行为上。我已经使用了断点并找到了错误所在,但我只是希望你们中的一个人知道问题是什么,而无需我复制+粘贴我的所有代码-.-
我得到了
在 Escape.exe: 0xC0000005:访问冲突写入位置0xcccccccc 0x1027cb1a (msvcr100d.dll) 的首次机会异常。 在 Escape.exe: 0xC0000005:访问冲突写入位置0xcccccccc中0x1027cb1a (msvcr100d.dll) 处未处理的异常。
现在,快速的谷歌搜索让我觉得有一些奇怪的事情正在发生。所有的搜索结果都谈到指针实际上没有指向任何地方(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 类型的 2D 数组。几天前我有这个工作,直到我添加了一些其他类,一切都停止了工作!
未初始化的指针或存储在内存中已释放的指针。 我认为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
部分为零,i
和z
第一次通过循环时均为零,因此您得到0xcccccccc + 0 + 0 + 0
作为内存地址。
若要调试此问题,请使用调用堆栈并找到调用 fillMap
的函数。 然后签入用于成员访问(->
)的指针来自的函数。
在 MSVC++ 和调试模式下,调试内存分配器将所有返回的内存设置为 0xcccccccc,作为查找未定义行为情况的一种方式。很可能,您从未初始化过myMap
或myMap
中的某些指针。检查初始化代码是否存在错误。
对于这个问题中发生的所有答案和评论,以下是有关Visual C++中内存填充的良好参考:
- http://msdn.microsoft.com/en-us/library/bebs9zyz.aspx
- 操作系统何时以及为什么会在malloc/free/new/delete上初始化内存以0xCD,0xDD等?
当我尝试使用 for 循环在我自己的类类型的表元素中填充字符串值时,也遇到了类似的错误。我在那个表中声明了 1000 个元素,所以我放了这样的东西:
for (int i = 0; i <= 1000; i++)
{
TAble[i].name = "Some Guy";
TAble[i].age = 4;
}
不幸的是,与字符串一样,我可能坚持使用不存在的 fillinf 元素,女巫是表中的元素编号 1000。我设法通过更改循环标题、删除 1000 之前的等号来解决这个问题。
试着看看你是否不想调用不存在的东西。
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 创建 2D 数组0xCCCCCCCC访问冲突写入位置
- 0xC0000005:访问违规写入位置0xcccccccc
- 访问冲突读取位置0xcccccccc
- 访问违规读取位置 0xCCCCCCCC.using bool & unsigned short
- C++:xxx中0x00101890处未处理的异常:0xC0000005:读取位置0xcccccccc的访问冲突
- 写入位置0xCCCCCCCC的访问冲突
- 访问冲突读取位置0xCCCCCCCC
- 链接表中读取位置0xCCCCCCCC错误
- 访问冲突读取位置0xcccccccc
- 访问冲突读取位置0xCCCCCCCC
- 访问冲突写入位置0xcccccccc
- c++访问冲突写入位置0xCCCCCCCC