从函数返回动态数组,并赋值给合适的变量

时间:2013-07-29 16:46:11

标签: 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];
      }
   }
   return str;
}

上一个功能的行为是:

  • 逐行阅读文本文件的内容。
  • 将每一行保存在2D数组的项目中。
  • 然后返回动态2D数组。

现在,我想将从函数返回的2D数组分配给合适的变量,或者我想返回对该动态2D数组的引用?

3 个答案:

答案 0 :(得分:1)

不要那样!!!

您无法在子例程内部分配数组...或数组数组...然后将其返回给调用者。

SUGGESTIONS:

1)在CALLER中声明“char * str [50]”(不在子程序内)并将其传递给

......或......

2)来电者中的“新”。 “new”从堆中分配;省略它从堆栈中分配。

3)使用std :: vector<>而不是一个简单的数组

... IMHO

答案 1 :(得分:0)

尽管人们已向您提出建议/警告,但您的功能标题应为char **readFile(const char *fileName)

为避免堆内存损坏,您应该按如下方式声明指针数组:

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

答案 2 :(得分:0)

你可以这样做

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;
   }
}