C++ 从函数返回动态数组,并分配给合适的变量

C++ 从函数返回动态数组,并分配给合适的变量,c++,dynamic-arrays,C++,Dynamic Arrays,我有以下功能 char* readFile(const char *fileName){ std::ifstream file(fileName); char *str[50]; int count=0; if(file){ str[0] = new char[50]; while(file.getline(str[count], 50)){ count++; str[count] = new char[50];

我有以下功能

char* readFile(const char *fileName){
   std::ifstream file(fileName);
   char *str[50];
   int count=0;
   if(file){
      str[0] = new char[50];
      while(file.getline(str[count], 50)){
         count++;
         str[count] = new char[50];
      }
   }
   return str;
}
上一个函数的行为是:

  • 逐行读取文本文件的内容
  • 保存二维数组项中的每一行
  • 然后返回动态2D数组
现在,我想把从函数返回的2D数组赋给一个合适的变量,或者我想返回对那个动态2D数组的引用?

不要这样做

无法分配数组。。。或者一组数组。。。在子例程内部,然后像这样将其返回给调用方

建议:

1) 在调用者中声明“char*str[50]”(不在子例程中),并将其传入

。。。或者

2) 调用方中的“新”。“新”从堆中分配;忽略它将从堆栈中分配

3) 使用std::vector而不是简单的数组


IMHO…

尽管人们已经向您提出了建议/警告,您的函数头应该是
char**readFile(const char*fileName)

为了避免堆内存损坏,您应该声明指针数组,如下所示:

char **str;
str = new char*[50];

你可以这样做

int** createMatrix(int row , int column)
{
    int **tem = new int*[row];
    for (int i=0; i<row; i++)
    {
        tem[i] = new int [column];
    }

    for(int i=0;i<row;i++)
    {
        for(int j=0;j<column;j++)
        {
            tem[i][j] = 1;
        }
    }
    return tem;
}

int main()
{
    int row=5;int column=1;
   int **arr=createMatrix(row,column);

   for(int i=0;i<row;i++){
    for(int j=0;j<column;j++){
    cout<<arr[i][j];
    }
    cout<<endl;
   }
}
int**createMatrix(int行,int列)
{
int**tem=新int*[行];

对于(int i=0),IUI当然可以分配一个数组并返回给调用方。我同意您通常不应该这样做,因为它会导致内存管理错误。除非这是一个受虐狂的练习,考虑一下一般的顺序:<代码> STD::向量行;而(STD::GETLINE(文件,行)行。