badf00d访问冲突

BAADF00D Access Violation

本文关键字:访问冲突 badf00d      更新时间:2023-10-16

很抱歉问一个这么简单的问题的答案,但我似乎不能自己解决这个问题。

那么,我有一个头文件,像这样:

#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()被用来检测屏幕上的某个tile是否允许玩家与它碰撞

您没有给出您得到的确切错误消息,但从标题中我推断出这就是您正在查看的内容:

0xBAADF00D:被Microsoft的调试HeapAlloc()用来标记未初始化分配的堆内存

在您的情况下,这意味着mMap从未被创建。尝试删除所有默认构造函数以查找导致此错误的确切错误。默认的move、copy和empty构造函数无论如何都不能正常工作,所以最好删除它们!