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

gr8qqesn  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(163)

我很难弄清楚如何使用双指针完成这个任务。在这个任务中,我需要打开一个包含地牢爬虫Map信息的文本文件。我们需要将这个Map作为一个char双指针加载,并返回那个双指针。如果不是很明显,这是我第一次尝试使用双指针。
我有一种感觉,我想太多了,因为这部分并不困难,通常我只会使用2D数组,但不幸的是,我必须使用双指针。
文本文件信息:如果信息是相关的,文本文件的第一行包含Map的宽度和高度,第二行包含玩家的位置,接下来的行包含地牢的内容,每个空间单位用一个字符表示。例如,一个3x 3的Map可能被格式化:
(edit:我有一个真正的困难时间让这个工作的格式。希望我的描述是足够好)
目标是将该文本文件的信息加载到双指针中,不包括前两行。
现在,这是我的代码,这会导致内存泄漏。我不允许更改函数标题或参数。我不知道我在做什么,所以这可能很难看。

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*[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[]",得到了同样的结果。这是我第一次在这里发帖,如果我的帖子有点不稳定,很抱歉。谢谢!

anhgbhbe

anhgbhbe1#

使用从文件中读入的maxRowmaxCol值来分配数组,而不是999999值。同时将循环条件更改为分别使用maxRowmaxCol。代码的其余部分看起来不错,但尚未测试。
正如上面的评论所指出的,如果maxRowmaxCol接近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;
}

相关问题