c++ - BAADF00D 访问冲突

标签 c++ access-violation

很抱歉询问一些可能很简单的问题的答案,但我自己似乎无法解决这个问题。

所以,我有一个头文件,如下所示:

#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/

相关文章:

c++ - 每当我更改 QTableWidget.item(row, col) 时发生访问冲突

c++ - BeginPath Textout EndPath 绘制反转文本

c++ - CUDA C - 无法编译在头文件中声明并在 .cu 中实现的类

c++ - (Mac) 将字符串参数从 VBA 传递到 dylib - 在 C++ 函数中接收到空字符串

c++ - 为什么对 AVX-Vector-wrapper-class-object-array 的元素进行赋值会引发访问冲突错误?

windows-7 - 计划任务导致访问冲突,但手动运行正常

调试 JNI 模块中的特定访问冲突

c++ - IShellDisptach:为什么 FolderItemVerbs::Release() + CoUninitialize() 会崩溃?

c++ - 如何在json文件中搜索对象的值?

c++ - 使用 boost lambda 访问静态成员