2013-12-13 21 views
0

函數應該從文本文件中讀取整數。第一個數字會告訴輸入文件中有多少個數字。動態分配的整數數組在功能結束時自行刪除

我首先初始化接收整數爲NULL的指針,但由於某種原因,當函數結束並返回時,它仍然指向NULL。

bool readFileToArray(const char* fileName, int *arr, int &size) 
{ 
    ifstream input = ifstream(fileName); 
    int i, num; 

    // check if file opened successfully and allow only non negative integers to be read as num of elements 
    if (!input.is_open() || !(input >> size) || size < 0) 
     return wasError(input); 

    // allocate an array of 'size' size 
    arr = new int[size]; 

    for (i = 0; i < size; i++) 
    { 
     input >> num; 

     // check for illegal input 
     if (input.fail()) 
      return wasError(input); 
     else 
      arr[i] = num; 
    } 

    // given size and actual size mismatch 
    if (i != size || !input.eof()) 
     return wasError(input); 

    // if file opening and writing ended successfully 
    return false; 
} 

回答

2

爲了回報分配的指針,你需要做arr的引用,否則你只是在局部泄漏的指針。

變化:

bool readFileToArray(const char* fileName, int *arr, int &size) 

到:

bool readFileToArray(const char* fileName, int *&arr, int &size) 

還要考慮使用更慣用的C++,如std::stringstd::vector,而不是C風格char *字符串和原始的陣列/指針。

+0

由於玩世不恭,我正在用原始數組編寫此版本,以顯示原始數組與STL的比較 – Quaker

2

使用int *arr將指針傳遞給函數。當你在功能分配給arr,你覆蓋指針的一個拷貝,而不是實際的變量,你的過去。

無論是指針傳遞給一個指針int** arr或引用指針int*& arr