很抱歉询问一些可能很简单的问题的答案,但我自己似乎无法解决这个问题。
所以,我有一个头文件,如下所示:
#ifndef LEVELMAP_H
#define LEVELMAP_H
#include "Constants.h"
class LevelMap
{
public:
LevelMap(int map[MAP_HEIGHT][MAP_WIDTH]);
~LevelMap();
int GetTileAt(unsigned int h, unsigned int w);
private:
int** mMap;
};
#endif LEVELMAP_H
还有一个 .ccp 文件,如下所示:
#include "LevelMap.h"
// 0 = empty, 1 = blocked
LevelMap::LevelMap(int map[MAP_HEIGHT][MAP_WIDTH])
{
//Allocate memory for the level map.
mMap = new int*[MAP_HEIGHT];
for(unsigned int i = 0; i < MAP_HEIGHT; i++)
{
mMap[i] = new int[MAP_WIDTH];
}
//Populate the array.
for(unsigned int i = 0; i < MAP_HEIGHT; i++)
{
for(unsigned int j = 0; j < MAP_WIDTH; j++)
{
mMap[i][j] = map[i][j];
}
}
}
LevelMap::~LevelMap()
{
//Delete all elements of the array.
for(unsigned int i = 0; i < MAP_HEIGHT; i++)
{
delete [] mMap[i];
}
delete [] mMap;
}
int LevelMap::GetTileAt(unsigned int h, unsigned int w)
{
if(h < MAP_HEIGHT && w < MAP_WIDTH)
{
return mMap[h][w];
}
return 0;
}
现在,我在“return mMap[h][w];”上遇到访问冲突线,我一生都无法找到解决方案。
就上下文而言,GetTileAt() 用于检测屏幕上的某个图 block 是否允许玩家与其发生碰撞。
最佳答案
您没有给出您收到的确切错误消息,但从标题我推断这就是您正在查看的内容:
0xBAADF00D : Used by Microsoft's debug HeapAlloc() to mark uninitialized allocated heap memory
在您的情况下,这意味着 mMap
从未创建。尝试删除所有默认构造函数以找到导致此问题的确切错误。默认的移动、复制和空构造函数无论如何都无法正常工作,因此最好删除它们!
关于c++ - BAADF00D 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22716347/