如何为char双指针分配和赋值

问题描述 投票:0回答:1

我很难弄清楚如何使用双指针完成这项作业。 在此作业中,我需要打开一个包含关卡信息的文本文件。我们期望将此映射作为 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[]”,这给了我相同的结果。 这是我第一次在这里发帖,如果我的帖子有点不稳定,我深表歉意。谢谢!

c++ pointers char double-pointer
1个回答
0
投票

使用从文件中读入的

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.