【发布时间】:2010-08-25 11:26:51
【问题描述】:
菜鸟 C++ 程序员又来了
我正在使用 VC++ VS2008 并尝试创建一个数组数组。我想存储的所有对象都放在堆上。
在数组中,它只是指针。
这里有一些代码:
网格.h
#include "Tile.h"
class Grid
{
public:
Tile* grid_ptr[8][8];
...
...
};
Grid.cpp
#include "stdafx.h"
#include "Grid.h"
...
...
void Grid::Initialize()
{
for(int i = 0; i < 8; i++)
{
Grid::grid_ptr[i][0] = new Tile::Tile(10,10);
for (int j = 0; j < 8; j++)
{
Grid::grid_ptr[i][j] = new Tile::Tile(10,10);
}
}
}
...
...
}
一切都很好,包括瓷砖结构。这似乎是一个语法错误,因为编译器给了我这个
错误 1 错误 C2061:语法错误:标识符“{ctor}”
错误 2 错误 C2061:语法错误:标识符“{ctor}”
始终是同一个故事。不幸的是,这让我的整个工作陷入了停顿,我非常感谢对此的解决方案。
简而言之。如何正确创建一个大小为 8x8 的数组,其中填充了引用其各自 tile 对象的指针?
这样使用内存是否可行或明智?
请注意,我确实阅读了很多关于此的示例,并且使用整数或其他数据类型这样做是成功的。然而,这根本不是我想要分配的
此处为 Tile.h,下方为 Tile.cpp
class Tile
{
public:
private:
enum TileOccupation
{
EmptyTile = 0,
WhiteSphere = 1,
BlackSphere = 2
};
unsigned short horizontalDimensions;
unsigned short verticalDimensions;
public:
Tile();
Tile(unsigned short horizontalDimensions, unsigned short verticalDimensions);
~Tile();
void Update();
void Draw();
};
> Tile.cpp
#include "stdafx.h"
#include "Tile.h"
Tile::Tile()
{
}
Tile::Tile(unsigned short horizontalDimensions, unsigned short verticalDimensions)
{
}
void Tile::Update()
{
}
void Tile::Draw()
{
}
【问题讨论】:
-
new Tile::Tile(10,10) -> new Tile(10,10);
-
你能告诉我们
Tile构造函数吗? -
您的
Grid::Initialize代码按原样泄漏了八个Tile对象:grid_ptr[i][0]两次获得一个新的对象。只需删除Grid::grid_ptr[i][0] = new Tile::Tile(10,10);行即可解决此问题。 -
它现在在帖子中。希望对你有帮助
-
你的 for 循环写得像这样,你也有一些内存泄漏。例如。对于 i = 0,您在 [0][0] 处分配新的 Tile 指针并将其放入数组中,然后 j 索引 for 循环将为 [0][0] 位置分配另一个 Tile 指针 - Q 前一个会发生什么瓷砖指针? - A 它泄漏; [1][0]、[2][0] 等也会发生这种情况。
标签: c++ arrays pointers object multidimensional-array