我只需要确定我有足够的内存来处理二维数组Map。所以我想我必须放一个try catch bad:在map的每一行都使用alloc,或者可能不使用throw会更优雅。但是我无法使用它。任何帮助都将不胜感激...
我读过一些关于写作的文章,比如:
map[i] = new int [columns];
if (map[i] == NULL)
cout << “No enough memory”;
我不喜欢这个解决方案,我读过这是不是很可靠的一个. fillmaze是一个函数内调用的迷宫构造函数..
void Maze::setupMaze(int r, int c, int l){
rows = r;
columns = c;
level = l;
fillMaze();
addBorders();
centerWalls();
getaway();
addWalls();
}
void Maze::fillMaze(){
map = new int* [rows];
for (int i = 0; i < rows; i++) {
map[i] = new int[columns];
}
//Inicializamos toda la tabla
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
map[i][j] = PASSAGE;
}
}
}
还有delete []
map是不够的,对吗?我在类的析构函数中做的:
Maze::~Maze(void)
{
for (int i = 0; i < rows; ++i)
delete[] map[i];
delete[] map;
}
1条答案
按热度按时间6l7fqoea1#
这就是为什么您应该使用
std::vector<>
,因为它将为您正确地处理所有内存管理。问题1:
new
从不返回NULL
(对于pedants,如下所示的普通new)。还要注意的是,在C++中,我们使用nullptr
而不是NULL
来保证类型安全。如果
fillmaze()
是从构造函数调用的,那么如果它抛出异常,析构函数就不会被调用,这意味着你必须处理任何分配失败。因此,您必须处理并能够检测到已经分配了哪些内容,以及哪些内容需要重新分配。
你的析构函数是丁。
但你可以用一个向量来简化这个过程: