且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何返回二维字符数组C ++?

更新时间:2022-04-24 01:42:42

呀看到你在做什么有返回一个指向一个对象(称为数组)将其在栈上创建的。当它超出范围的阵列被破坏使指针不再指向任何有效的对象(悬摆指针)。

Yeah see what you are doing there is returning a pointer to a object (the array called board) which was created on the stack. The array is destroyed when it goes out of scope so the pointer is no longer pointing to any valid object (a dangling pointer).

您需要确保该数组在堆上分配,而不是使用。成圣的方法来创建现代C ++动态分配的数组是使用类似的std ::矢量类,虽然这更复杂在这里,因为你正在试图建立一个2D数组。

You need to make sure that the array is allocated on the heap instead, using new. The sanctified method to create a dynamically allocated array in modern C++ is to use something like the std::vector class, although that's more complicated here since you are trying to create a 2D array.

char **createBoard()
{
    char **board=new char*[16];
    for (int i=0; i<16; i++)
    {
       board[i] = new char[10];
       for (int j=0; j<10; j++)
         board[i][j]=(char)201;
    }

    return board;
}

void freeBoard(char **board)
{
    for (int i=0; i<16; i++)
      delete [] board[i];
    delete [] board;
}