2013-07-29 2 views
0

다음과 같은 기능이 있습니다.함수에서 동적 배열을 반환하고 적절한 변수에 할당

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 배열에 대한 참조를 반환하겠습니까?

+1

같이 할 수있는이 마조히즘에있는 운동이 아니라면, 고려 뭔가 일반적인 순서 :'std :: vector lines; while (std :: getline (file, line) lines.push_back (line);'. –

답변

1

하지 마세요 !!!

서브 루틴의 배열 또는 배열 배열을 할당 할 수 없으며 그런 다음 호출자에게 반환 할 수 없습니다.

제안 :

1) 선언

"숯 *의 STR은 [50]"호출자 (아닌 서브 루틴 내)과의 ...

에 전달 ... 또는

2) "새로운"호출자 내부. "new"는 힙에서 할당합니다. 이를 생략하면 스택에서 할당됩니다.

3)> 대신에 사람들이 이미 귀하에게 한 제안/경고에도 불구하고 간단한 배열

이럴 ...

+0

확실히 배열을 할당하여 호출자에게 돌려 줄 수 있습니다. 메모리 관리 오류가 발생하기 쉽습니다. –

0

의 표준 : : 벡터 <를 사용, 함수 헤더는 char **readFile(const char *fileName)해야한다. 다음과 같이

그리고 손상 힙 메모리를 피하기 위해, 당신은 포인터의 배열을 선언해야합니다

char **str; 
str = new char*[50]; 
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; 
    } 
} 
관련 문제