我很难弄清楚如何使用双指针完成这项作业。 在此作业中,我需要打开一个包含关卡信息的文本文件。我们期望将此映射作为 char 双指针加载,并返回该双指针。如果不是很明显,这是我第一次尝试使用双指针。
我觉得我想太多了,因为这部分不应该很难。通常我只会使用二维数组,但不幸的是我必须使用双指针。
文本文件信息: 如果信息相关,文本文件的第一行包含地图的宽度和高度,第二行包含玩家位置,接下来的行包含地图的内容,每个空间单位由一个字符表示.例如,一张 3 x 3 的地图可能被格式化为:
(编辑:我真的很难让这个格式工作。希望我的描述足够好)
目标是将该文本文件的信息加载到双指针中,不包括前两行。
现在,这是我的代码,它会导致内存泄漏。我不允许更改函数标题或参数。我不知道我在做什么,所以这可能很难看。
char** loadMap(const string& fileName, int& maxRow, int& maxCol, Player& player) //not allowed to change
{
ifstream level;
level.open(fileName);
level >> maxRow >> maxCol >> player.row >> player.col;
//declare and assign memory ---> where I'm having trouble
char** map = new char*[999999];
for(int i = 0; i < 999999; i++) //maps can have a maximum height and width of 999,999 each.
{
map[i] = new char[999999];
}
for(int r = 0; r < 999999; r++) //row
{
for(int c = 0; c < 999999; c++) //column
{
level >> map[r][c]; //assign the next char in the level to map position [r][c]
}
}
return map;
}
我也尝试过使用 malloc() 而不是执行“new char[]”,这给了我相同的结果。 这是我第一次在这里发帖,如果我的帖子有点不稳定,我深表歉意。谢谢!
使用从文件中读入的
maxRow
和maxCol
值来分配数组,而不是999999
值。还要更改循环条件以分别使用 maxRow
和 maxCol
。其余代码看起来没问题,但尚未经过测试。
正如上面的评论所指出的,如果
maxRow
和 maxCol
接近 999999
值,您将没有足够的内存。
char** loadLevel(const string& fileName, int& maxRow, int& maxCol, Player& player) //not allowed to change
{
ifstream level;
level.open(fileName);
level >> maxRow >> maxCol >> player.row >> player.col;
//declare and assign memory ---> where I'm having trouble
char** map = new char*[maxRow];
for(int i = 0; i < maxRow; i++) //maps can have a maximum height and width of 999,999 each.
{
map[i] = new char[maxCol];
}
for(int r = 0; r < maxRow; r++) //row
{
for(int c = 0; c < maxCol; c++) //column
{
level >> map[r][c]; //assign the next char in the level to map position [r][c]
}
}
return map;
}