该函数应该从文本文件中读取整数。第一个数字将告诉输入文件中有多少个数字。
我首先将接收整数的指针初始化为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;
}
答案 0 :(得分:2)
为了返回已分配的指针,您需要使arr
成为引用,否则您只是在本地泄漏指针。
变化:
bool readFileToArray(const char* fileName, int *arr, int &size)
为:
bool readFileToArray(const char* fileName, int *&arr, int &size)
还要考虑使用更多惯用的C ++,例如std::string
和std::vector
,而不是C风格的char *
字符串和原始数组/指针。
答案 1 :(得分:2)
使用int *arr
通过 value 将指针传递给函数。当您在函数中分配arr
时,您将覆盖指针的副本,而不是您传入的实际变量。
将指针传递给指针int** arr
或引用指针int*& arr
。