会员声明中的位置打破代码
Position in Member Declaration Breaks Code?
不久前我问了一个问题,说明为什么以下代码不起作用:
std::vector<std::vector<std::vector<Tile_Base*>>> map_tile; // This is located in Map object. See below.
int t_x, t_y;
t_x = t_y = 200;
map_tiles.begin(); // clear(), resize() and every other function still causes problems
事实是,它应该有效,但是当调用调整大小函数时,Visual Studios 2012会引发例外。例外指的是这件代码:
*_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter)
位于Xutility。它说,访问阅读记忆时遇到了违法行为。我以为也许我一路上失去了与会员的访问权?(使用VS的手表,我看到内存没有损坏)
所以,我摆弄了代码,试图找出可能出错的事情,一段时间后,我将MAP_TILES对象移到了列表的底部,并且有效:
// WORKS
class Map {
std::vector<Tile_Base*> spawn_tiles;
// map tile specific
bool Is_Valid(int,int);
std::string name;
std::vector<std::vector<std::vector<Tile_Base*> > > map_tiles;
public:
// ...
}
// DOESN'T WORK
class Map {
std::vector<std::vector<std::vector<Tile_Base*> > > map_tiles;
std::vector<Tile_Base*> spawn_tiles;
// map tile specific
bool Is_Valid(int,int);
std::string name;
public:
// ...
}
指出出了什么问题的任何帮助?我无法提出任何合理的解释。
a vector<T>
包括两个离散的数据集:内部状态和ts数组。内部状态 - 容量,大小,指针 - 与数组分开。您所描述的问题通常是由覆盖 vector对象(即内部状态)的东西引起的。要轻松地跟踪此操作,您可以使用一个容器类:
typedef std::vector<std::vector<std::vector<Tile_Base*> > > maptiles_t;
class CMapTiles
{
unsigned int m_guard;
maptiles_t m_tiles;
enum { Guard = 0xdeadbeef };
public:
CMapTiles() : m_guard(Guard), m_tiles() {}
~CMapTiles() { assert(m_guard == Guard); }
void Check()
{
#if defined(DEBUG)
if (m_guard != Guard)
DebugBreak();
#endif
}
void Resize(size_t x, size_t y)
{
Check();
auto init = std::vector<std::vector<Tile_Base*> >(y/32);
m_tiles.resize(m_x / 32, init);
Check();
}
const maptiles_t& tiles() const { Check(); return m_tiles; }
maptiles_t& tiles() { Check(); return m_tiles; }
};
,而不是使用std::vector<...> map_tiles
具有CMapTiles map_tiles
,然后当您想获得 map_tiles.tiles()
时。
希望这会有所帮助。
相关文章:
- 如何使用 lldb 查找我的代码运行的位置
- 在C++代码中搜索对象的实例化位置
- 我应该在服务模板中的什么位置添加自己的代码?
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 当光标位置在编辑控件 MFC 中更改时是否有通知代码?
- C++11 中的随机数:有没有一种简单的方法可以将生成器种子放在代码的一个位置,然后在不同的函数中使用它?
- cv:内存位置的异常 - 运行 openCV 代码 Visual Studio 2013 & Visual Studio 2017 - Windows 7
- 我如何在代码中找到(和删除)需要管理员特权的位置
- 如何跟踪通过外部代码修改类变量的所有位置
- 了解现代OpenGL中的代码绘图.OBJ并设置不同的位置
- Microsoft C++异常runtime_error在内存位置(代码 0x75A818A2)
- 给定代码段中引用的时间和空间位置的所有出现
- 当我在Xcode上访问矩阵(openCV垫子)的位置时,为什么我会得到未定义的行为(exc_bad_access(代码=
- 8谜题代码.我的队列没有填充,我找不到错误的位置
- 在C++中,为什么代码示例在重载运算符时经常使用内存位置
- 是否可以从代码中获取依赖库的位置
- 如何在C++中获取代码片段的位置
- G -FPIC不产生位置独立代码
- 如何在G 代码中找到给定的成员函数或CTOR的所有位置
- 调试__do_global_dtors_aux以查找代码位置