我有以下功能。
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数组的引用?
答案 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;
}
}